随笔 - 1357  文章 - 0  评论 - 1104  阅读 - 1941万

Java常用集合比较

1. ArrayList

  基于数组方式实现,无容量的限制。

  在执行插入元素时可能要扩容,在删除元素时并不会减少数组的容量。

  如果希望相应的缩小数组容量,可以调用trimToSize()

  在查找元素时要遍历数组,对于非null的元素采取equals的方式寻找。

  非线程安全。

2. LinkedList

  基于双向链表机制实现。

  元素的插入、移动较快。

  非线程安全。

3. Vector

  基于Object数组的方式来实现的。

  基于synchronized实现的线程安全的ArrayList。

  在插入元素时容量扩充的机制和ArrayList稍有不同:
  如果capcacityIncrement > 0, 则Object数组的大小扩大为现有size加上capcacityIncrement;
  如果capcacityIncrement < 0, 则Object数组的大小扩大为现有size的两倍;

4. Stack

  基于Vector实现,支持LIFO。

5. HashSet

  基于HashMap实现,无容量限制。

  不允许元素重复。

  非线程安全。

6. TreeSet

  基于TreeMap实现,支持排序。

  非线程安全。

7. HashMap

  采用数组方式存储key、value构成的Entry对象,无容量限制。

  基于key hash寻找Entry对象存放到数组的位置,对于hash冲突采用链表的方式来解决。

  在插入元素时可能会扩大数组的容量,在扩大容量时会重新计算hash,并复制对象到新的数组中。

  非线程安全。

8. TreeMap

  基于红黑树实现,无容量限制。

  非线程安全。

-----------------------------------
适用场景:

  对于查找和删除较为频繁,且元素数量较多的应用,Set或Map是更好的选择;

  ArrayList适用于通过为位置来读取元素的场景;

  LinkedList 适用于要头尾操作或插入指定位置的场景;

  Vector 适用于要线程安全的ArrayList的场景;

  Stack 适用于线程安全的LIFO场景;

  HashSet 适用于对排序没有要求的非重复元素的存放;

  TreeSet 适用于要排序的非重复元素的存放;

  HashMap 适用于大部分key-value的存取场景;

  TreeMap 适用于需排序存放的key-value场景。

posted on   Ruthless  阅读(3013)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
< 2011年2月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 1 2 3 4 5
6 7 8 9 10 11 12

点击右上角即可分享
微信分享提示