Java集合篇

Java集合篇

概念

JAVA中的集合

List

List是有序的collection,主体为数组

  • ArrayList,扩容原理是,将原来的数组复制到新的数组。查询快,插入删除慢。
  • LinkedList 是双向链表,查询慢,插入删除快。

Set

set不允许重复的元素,set中是无序的。

  • HashSet 是通过HashMap实现的,(所有Key都是用相同的Value,一个名为PRESENT的Object类型常量)。
    因为基于HashMap,所以线程不安全。
  • LinkedHashSet继承HashSet,使用双向链表维护插入顺序。
  • TreeSet通过TreeMap实现。有序

Map

Map是键值对集合。

  • HashMap 数组+链表。当链表长度大于8,表容量>=64,桶内变为红黑树。
  • LinkedHashMap 基于HashMap,双向链表。
  • HashTable 数组+链表。加锁,颗粒度粗。
  • TreeMap 红黑树
  • ConcurrentHashMap Node数组+链表+红黑树实现,线程安全的(jdk1.8以前Segment锁,1.8以后volatile + CAS 或者 synchronized)

线程安全的集合

常见的。

  • HashTable 给每个方法加synchronized锁
  • ConcurrentHashMap:它与 HashTable 的主要区别是二者加锁粒度的不同,在JDK1.7,ConcurrentHashMap加的是分段锁,也就是Segment锁,每个Segment 含有整个 table 的一部分,这样不同分段之间的并发操作就互不影响。
    JDK 1.8 ,它取消了Segment字段,直接在table元素上加锁,实现对每一行进行加锁,进一步减小了并发冲突的概率。对于put操作,如果Key对应的数组元素为null,则通过CAS操作(Compare and Swap)将其设置为当前值。如果Key对应的数组元素(也即链表表头或者树的根元素)不为null,则对该元素使用 synchronized 关键字申请锁,然后进行操作。如果该 put 操作使得当前链表长度超过一定阈值,则将该链表转换为红黑树,从而提高寻址效率。

集合遍历的方法

  • for
  • 增强for循环(string element : List)
  • Iterator迭代器
  • ListIterator迭代器
  • forEach方法
  • Stream API

Java集合篇
http://example.com/2025/08/19/Java集合篇/
作者
Luogic
发布于
2025年8月19日
许可协议