Java中常见的集合

目录

1. List(有序、可重复、支持索引)

2. Set(无序、唯一)

3. Queue(队列)

Map 接口(键值对)

1. 通用Map

2. 并发安全Map


1. List(有序、可重复、支持索引)

  • ArrayList

    • 底层:动态数组

    • 特点:查询快(O(1)),增删慢(需要移动元素)

    • 线程不安全,默认初始容量为10,扩容为1.5倍。

  • LinkedList

    • 底层:双向链表

    • 特点:增删快(O(1)),查询慢(O(n))

    • 支持队列(Deque)操作,如addFirst()pollLast()

2. Set(无序、唯一)

  • HashSet

    • 底层:基于HashMap实现(哈希表)

    • 特点:插入、删除、查询的时间复杂度接近O(1)

    • 无序,依赖hashCode()equals()方法去重。

  • LinkedHashSet

    • 底层:链表 + 哈希表

    • 特点:保持元素的插入顺序。

  • TreeSet

    • 底层:红黑树(基于TreeMap实现)

    • 特点:元素自然排序或通过Comparator自定义排序,增删查时间复杂度O(log n)。

3. Queue(队列)

  • PriorityQueue

    • 底层:堆(默认最小堆)

    • 特点:元素按优先级排序,出队顺序由优先级决定。

  • ArrayDeque

    • 底层:动态数组(双端队列)

    • 特点:支持高效的头尾插入和删除操作,可替代Stack(性能更好)。

Map 接口(键值对)

1. 通用Map
  • HashMap

    • 底层:数组 + 链表/红黑树(Java 8后链表长度>8时转红黑树)

    • 当同一个位置的链表超过八个,或者数组长度超过64个,会将链表转化为红黑树

    • 特点:键无序,允许null键和null值,线程不安全。

    • 初始容量16,负载因子0.75(扩容阈值=容量*负载因子)。

    • 若数组长度不超过64,链表长度超过8个,则会进行扩容,将数组长度翻倍

  • LinkedHashMap

    • 底层:链表 + 哈希表

    • 特点:保持键的插入顺序或访问顺序(LRU缓存场景)。

  • TreeMap

    • 底层:红黑树

    • 特点:键按自然顺序或Comparator排序,支持范围查询。

  • Hashtable

    • 线程安全的哈希表(方法用synchronized修饰),不允许null键值,性能较低,已被ConcurrentHashMap替代。

2. 并发安全Map
  • ConcurrentHashMap

    • 线程安全的高并发哈希表(分段锁/CAS + 同步块),替代Hashtable

    • Java 8后采用Node + synchronized + CAS实现。

  • ConcurrentSkipListMap

    • 基于跳表实现的有序并发Map,支持高并发查询和更新。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值