Java集合概述

Java集合,也叫作容器,主要由CollectionMap两大顶层接口转化而来,其中Collection下面又有ListQueueSet三大接口。Java集合框架图如下图所示:

Collection接口

List接口

  • ArrayList:基于动态数组实现,支持随机访问。
  • Vector:和ArrayList类似,但它是线程安全的。
  • LinkedList:基于双向链表实现,只能顺序访问( JDK1.6 之前为循环链表,JDK1.7 取消了循环 )。

Set接口

  • HashSet:底层采用HashMap保存元素,支持快速查找 。
  • TreeSet:基于红黑树实现(有序,唯一),可以范围查找。
  • LinkedHashSet:是HashSet的子类,内部通过LinkedHashMap实现的。

Queue接口

  • PriorityQueue:基于堆结构实现优先队列。
  • ArrayQueue: 基于可变长的数组和双指针来实现。
  • LinkedList:它也实现了Queue接口。

Map接口

  • TreeMap:基于红黑树实现的。
  • HashMap: JDK1.8 之前 HashMap 由数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8 以后当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间 。
  • HashTable:和 HashMap 类似,但它是线程安全的,这意味着同一时刻多个线程可以同时写入 HashTable 并且不会导致数据不一致。它是遗留类,不应该去使用它。现在可以使用 ConcurrentHashMap 来支持线程安全,并且 ConcurrentHashMap 的效率会更高,因为 ConcurrentHashMap 引入了分段锁。
  • LinkedHashMapLinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。

参考链接

  1. https://pdai.tech/md/java/collection/java-collection-all.html
  2. https://javaguide.cn/java/collection/java-collection-questions-01
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2022 Yin Peng
  • 引擎: Hexo   |  主题:修改自 Ayer
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信