当前位置: 首页 > article >正文

Java中的集合体系

一、集合接口

Collection:这是集合的根接口,定义了集合的基本操作,如添加、删除、遍历等。

  • Set:继承自Collection,不允许包含重复元素。

  • List:继承自Collection,允许包含重复元素,并且元素是有序的。

  • Queue:继承自Collection,用于实现队列数据结构,支持先进先出(FIFO)的操作。

        队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删除; Queue的实现类有LinkedList和PriorityQueue。最常用的实现类是LinkedList。因此,我们可以理解为 LinkedList 就是一个队列;

Java队列继承图:

队列常用方法
  add                增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
  remove           移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
  element          返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常
  offer               添加一个元素并返回true       如果队列已满,则返回false
  poll                 移除并返问队列头部的元素    如果队列为空,则返回null
  peek               返回队列头部的元素             如果队列为空,则返回null
  put                 添加一个元素                      如果队列满,则阻塞
  take                移除并返回队列头部的元素     如果队列为空,则阻塞
       drainTo(list)   一次性取出队列所有元素

非阻塞队列
1、ConcurrentLinkedQueue
  单向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全,内部基于节点实现

2、ConcurrentLinkedDeque  
双向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全    

3、PriorityQueue
内部基于数组实现,线程不安全的队列

阻塞队列
1、DelayQueue
一个支持延时获取元素的无界阻塞队列

2、LinkedTransferQueue
一个由链表结构组成的无界阻塞队列。

3、ArrayBlockingQueue
有界队列,阻塞式,初始化时必须指定队列大小,且不可改变;,底层由数组实现;

4、SynchronousQueue
最多只能存储一个元素,每一个put操作必须等待一个take操作,否则不能继续添加元素

5、PriorityBlockingQueue
一个带优先级的队列,而不是先进先出队列。元素按优先级顺序被移除,而且它也是无界的,也就是没有容量上限,虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会导致 OutOfMemoryError 错误;

  • Deque:继承自Queue,用于实现双端队列数据结构,支持在队列的两端进行插入和删除操作。

ArrayDeque:实现了Deque接口,使用数组实现,支持在队列的两端进行插入和删除操作。

public static void main(String[] args) {
        Deque deque = new ArrayDeque();
        deque.add("1");
        deque.add("2");
        deque.add("3");

        //再队首插入数据
        deque.addFirst("0");
        //再队尾插入数据
        deque.addLast("4");
        System.out.println("初始数据:"+deque);

        //获取队首数据
        Object peekFirst = deque.peekFirst();
        System.out.println("获取队首数据:"+peekFirst);
        //获取队尾数据
        Object peekLast = deque.peekLast();
        System.out.println("获取队尾数据:"+peekLast);
        //移除队首数据
        Object pollFirst = deque.pollFirst();
        System.out.println("移除队首数据:"+pollFirst);
        //移除队尾数据
        Object pollLast = deque.pollLast();
        System.out.println("移除队尾数据:"+pollLast);

        System.out.println(deque);
    }

响应结果:

二、集合实现类

  • ArrayList:实现了List接口,使用数组实现,支持快速随机访问,但在插入和删除元素时效率较低。
  • LinkedList:实现了List接口,使用双向链表实现,在插入和删除元素时效率较高,但随机访问效率较低。
  • HashSet:实现了Set接口,使用哈希表实现,不允许包含重复元素,并且元素是无序的。
  • TreeSet:实现了Set接口,使用红黑树实现,不允许包含重复元素,并且元素是有序的。
  • PriorityQueue:实现了Queue接口,使用堆实现,支持优先级队列。
  • ArrayDeque:实现了Deque接口,使用数组实现,支持在队列的两端进行插入和删除操作。

三、映射接口:

  • Map:定义了键值对的映射关系,每个键只能映射到一个值。

四、映射实现类:

  • HashMap:实现了Map接口,使用哈希表实现,不保证键值对的顺序,允许一个键为null。
  • TreeMap:实现了Map接口,使用红黑树实现,保证键值对的顺序,不允许键为null。
  • LinkedHashMap:实现了Map接口,使用哈希表和双向链表实现,保证键值对的插入顺序,允许一个键为null。
  • Hashtable:实现了Map接口,使用哈希表实现,不保证键值对的顺序,不允许键或值为null。

http://www.kler.cn/a/410092.html

相关文章:

  • 单片机_简单AI模型训练与部署__从0到0.9
  • 【计算机网络】多路转接之poll
  • Django实现智能问答助手-数据库方式读取问题和答案
  • 【实战】基于urllib和BeautifulSoup爬取jsp网站的数据
  • vue实现滚动下拉加载更多
  • 基于STM32的智能家居电器控制系统
  • 问题记录-Java后端
  • STM32端口模拟编码器输入
  • docker部署springboot、挂载配置文件
  • 241125学习日志——[CSDIY] [ByteDance] 后端训练营 [15]
  • 代谢组数据分析(二十二):Zscore标准化后主成分分析(PCA)及热图展示
  • vue中el-table合并单元格
  • 【论文解析】HAQ: Hardware-Aware Automated Quantization With Mixed Precision
  • 深入解析常见的设计模式
  • 三种蓝牙架构实现方案
  • python基础练习
  • ThingsBoard安装测试
  • 学习python的第十三天之函数——函数传参中的传值和传址问题
  • 基于FPGA的2FSK调制-串口收发-带tb仿真文件-实际上板验证成功
  • 网络常见命令
  • 美妆连锁新纪元:多门店电商系统如何重塑美妆产业新生态
  • 如何在 UniApp 中实现 iOS 版本更新检测
  • go-rod vs Selenium:自动化测试工具的比较与选择
  • STM32C011开发(1)----开发板测试
  • 人名分类器(nlp)
  • 44.扫雷第二部分、放置随机的雷,扫雷,炸死或成功 C语言