首页 > 编程语言 >论 JAVA 集合框架中 接口与类的关系

论 JAVA 集合框架中 接口与类的关系

时间:2024-09-22 16:49:50浏览次数:3  
标签:JAVA LinkedList 实现 元素 List 接口 Queue 集合

前言

这是笔者在学习过程中的一篇"备忘录",其目的是能用最EZ最粗鄙的语言口述出 JAVA集合框架中 所有类与接口的关系

本人在不断地学习中,总会混淆集合框架中的类和接口,以及它们的作用关系,虽然不影响我的使用,但是我也不想一直糊涂下去,故而趁知识还没混淆之际,赶紧写下来.

这不是一篇看起来很专业的文章,但我希望它是最好懂的.

正文

首先请看图

Java 集合框架包括多个接口,每个接口定义了一类集合的通用操作和行为。主要接口包括:

  • Collection 接口:这是所有集合类的根接口,它定义了一些基本的集合操作方法,如 add(), remove(), size(), isEmpty() 等。Collection 接口的主要实现包括 Set, List, 和 Queue

  • Set 接口:继承自 Collection,表示一个不允许重复元素的集合。常见实现类有 HashSet, LinkedHashSet, 和 TreeSetSet 主要关注元素的唯一性。

  • List 接口:继承自 Collection,表示一个有序的集合,允许重复元素。常见实现类有 ArrayList, LinkedList, 和 VectorList 提供按索引访问元素的方法。

  • Map 接口:与 Collection 不同,Map 表示键值对的映射关系。常见实现类有 HashMap, TreeMap, 和 LinkedHashMapMap 用于存储和管理键值对,其中键是唯一的。

我们知道, 接口可以被看做是一种"行为指导准则". 定义了可以实现的方法

而我们的类,它就是"执行者",类不仅仅负责实现接口定义的方法,还包含了更多关于数据、逻辑和具体功能的实现细节。

结论一

一个类实现了不同的接口,功能也会改变

举例:ArrayListLinkedList

ArrayListLinkedList 是 Java 集合框架中的两个常见类,它们都实现了多个接口,但由于它们的实现方式不同,表现的行为也有差异。

ArrayList 实现的接口:

  • List:这是最重要的接口,定义了有序、可重复的元素集合。
  • RandomAccess:这是一个标识接口,表明该类支持快速的随机访问(按索引访问元素)。
  • Cloneable:表明该类可以被克隆。
  • Serializable:表明该类的对象可以被序列化,便于保存到文件或通过网络传输。

LinkedList 实现的接口:

  • List:同样实现了 List 接口,表明它支持有序集合。
  • Deque:这是 Queue 的子接口,表明 LinkedList 可以作为双端队列使用。
  • CloneableSerializable:和 ArrayList 一样,它也可以被克隆和序列化。
List<String> arrayList = new ArrayList<>();
List<String> linkedList = new LinkedList<>();

// ArrayList 随机访问效率高
String arrayElement = arrayList.get(2);

// LinkedList 插入/删除操作效率高
linkedList.addFirst("First Element");

 其次,不同类对于接口的实现程度也是有区别的

例如

完全实现:

  • ArrayList 实现了 List 接口,提供了按索引访问和操作元素的方法,并维护元素的顺序。
  • HashSet 实现了 Set 接口,确保集合中元素的唯一性,并不维护元素的顺序。
  • HashMap 实现了 Map 接口,提供了对键值对的高效存储和检索。

部分实现:

AbstractListAbstractSet 是抽象类,它们提供了 ListSet 接口的一部分实现。它们允许子类继承并补充实现。

结论二

一个接口用不同类去实现,效果也会不同

以  Queue 接口举例

有很多类都可以实现 这个接口

以笔者能完全掌握的知识举例

1. LinkedList 实现 Queue 接口

  • LinkedList 是基于链表的实现,插入和删除元素时效率较高(O(1) 操作),尤其是在队列的头尾操作时。
  • 它可以作为队列,也可以作为双端队列使用,支持从头部和尾部的操作。

效果

  • 适用于需要频繁插入和删除操作的场景,且元素不需要按顺序排序。
import java.util.LinkedList;
import java.util.Queue;

public class LinkedListQueueExample {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        
        // 添加元素到队列
        queue.offer("A");
        queue.offer("B");
        queue.offer("C");
        
        // 查看队首元素
        System.out.println("队首元素: " + queue.peek()); // 输出: A
        
        // 移除队首元素
        System.out.println("移除: " + queue.poll());     // 输出: A
        
        // 再次查看队首元素
        System.out.println("队首元素: " + queue.peek()); // 输出: B
    }
}

2. PriorityQueue 实现 Queue 接口

  • PriorityQueue 是基于的实现,插入元素时按照优先级顺序插入,取出元素时总是取出优先级最高的元素。
  • 虽然也是队列,但并不保证元素按插入顺序排布,而是按优先级排序。

效果

  • 适用于需要根据优先级处理元素的场景,例如任务调度、事件处理等。
import java.util.PriorityQueue;
import java.util.Queue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        Queue<Integer> priorityQueue = new PriorityQueue<>();
        
        // 添加元素
        priorityQueue.offer(10);
        priorityQueue.offer(20);
        priorityQueue.offer(15);
        
        // 移除优先级最高的元素(最小元素)
        System.out.println("移除: " + priorityQueue.poll());  // 输出: 10
        System.out.println("队首元素: " + priorityQueue.peek()); // 输出: 15
    }
}

3. ArrayDeque 实现 Queue 接口

  • ArrayDeque 是基于动态数组的双端队列,既可以作为栈使用,也可以作为队列使用,插入和删除操作效率较高(O(1))。
  • 它不允许 null 元素,并且容量可以动态调整。
import java.util.ArrayDeque;
import java.util.Queue;

public class ArrayDequeExample {
    public static void main(String[] args) {
        Queue<String> arrayDeque = new ArrayDeque<>();
        
        // 添加元素
        arrayDeque.offer("A");
        arrayDeque.offer("B");
        arrayDeque.offer("C");
        
        // 查看和移除队首元素
        System.out.println("队首元素: " + arrayDeque.peek()); // 输出: A
        System.out.println("移除: " + arrayDeque.poll());     // 输出: A
        System.out.println("队首元素: " + arrayDeque.peek()); // 输出: B
    }
}

所以说

  • LinkedList:适合频繁插入和删除的场景;
  • PriorityQueue:适合按优先级排序的场景;
  • ArrayDeque:适合队列和栈操作场景。

结尾

这些大部分都是JAVASE的基础知识,笔者今天只是捋一捋,防止未来的自己又忘记这些基础知识了,如果有问题,请各位斧正.

标签:JAVA,LinkedList,实现,元素,List,接口,Queue,集合
From: https://blog.csdn.net/cjejwe/article/details/142438747

相关文章

  • JavaScript二进制浮点数和四舍五入错误
    二进制浮点数和四舍五入错误实数有无数个,但JS通过浮点数的形式,只能表示有限个数,JS表现的常常是真实值的近似表示。二进制无法表示类似于0.1这样的十进制数字,只能机器近似于0.1,看如下代码:<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>3......
  • JavaScript中的Math对象详解
    JS中的算术运算基本运算:加减乘除求余数,+-*/%.复杂运算:通过Math对象的属性定义的函数和常量来实现。代码实现:<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>3.1.3JS中的算术运算</title></head><body>......
  • 关于​​Vue学习笔记6中纯JavaScript实现的改进优化1
    0前言在 Vue学习笔记6:分别使用纯JavaScript和Vue的v-if指令来有条件地渲染网页元素_PurpleEndurer@5lcto的技术博客_51CTO博客的纯JavaScript实现有条件地渲染网页元素中,我们列举了苹果、桔子和葡萄3种水果,并使用3个<p>...</p>来对应,在实现显示用户选择的水果的showFruit函数中,......
  • 淘宝商品详情数据接口包括哪些参数
    ‌淘宝商品详情数据接口‌的参数主要包括商品ID(num_iid)、是否获取促销价(is_promotion)、返回的字段列表(fields)等。这些参数的选择可以根据开发者的需求灵活调整,以获取所需的商品详情信息。‌商品ID(num_iid)‌:这是淘宝商品详情数据接口的核心参数,用于唯一标识一个淘宝商品。通过......
  • 淘系商品评论数据洞察:通过接口挖掘用户反馈
    淘宝商品评论API接口是淘宝开放平台提供的一种应用程序接口,它允许第三方开发者通过特定的请求方式和参数,获取淘宝商品的评论数据。   ——在成长的路上,我们都是同行者。这篇关于淘系商品评论数据洞察:通过接口挖掘用户反馈的文章,希望能帮助到您。期待与您继续分享更多......
  • 【计算机专业毕设最新Java必过毕设选题2025】基于springboot的高校跳蚤市场管理系统(源
    作品简介 Hi,各位同学好呀!今天向大家分享一个最新完成的高质量毕业设计项目作品基于springboot的XXX管理系统项目评分(最低0分,满分5分)难度系数:3分工作量:5分创新点:3分界面美化:5分使用技术前端:html/js/css后端:springboot数据库:MySql服务器:apache-tomcat......
  • java 指定外部jar路径
    在Java中指定外部JAR文件的路径有多种方法,具体取决于你使用的开发环境和构建工具。以下是一些常见的方法:1.使用命令行如果你使用命令行来运行Java程序,可以通过-cp或-classpath参数来指定外部JAR文件的路径。示例假设你有一个主类MainClass和一个外部JAR文件exter......
  • idea运行java项目main方法报build failure
    当你在IntelliJIDEA中运行Java项目的main方法时遇到buildfailure,这通常意味着构建过程中出现了问题。以下是一些常见的原因和解决方法:1.检查构建日志首先,查看构建日志以获取详细的错误信息。构建日志通常会显示具体的错误原因,帮助你定位问题。2.检查依赖项确保所有依赖......
  • JavaDos
    JavaDosjavados命令是用来生成自己API文档的参数信息@author作者名@version版本名@since指明需要最早使用的jdk版本@param参数名@return返回值情况@throws异常抛出情况生成JavaDos文档选择生成JavaDos文档范围,只对一个源文件生成Dos,所以选择文件。输......
  • Java异常处理:给程序罩一层保险
    编译器强制要求程序员为检查异常做预处理工作——捕获异常并处理或者抛出异常,否则编译器就会提示错误。常见的这类异常有SQLException、IOException和ClassNotFoundException。编译器不会提示非检查异常,也不要求在程序中处理这些异常。但通常情况下,程序员应该对这些异常有所防范......