您好,登录后才能下订单哦!
# Java常用的集合有哪些
## 目录
1. [集合框架概述](#集合框架概述)
2. [List接口及实现类](#list接口及实现类)
- [ArrayList](#arraylist)
- [LinkedList](#linkedlist)
- [Vector](#vector)
3. [Set接口及实现类](#set接口及实现类)
- [HashSet](#hashset)
- [LinkedHashSet](#linkedhashset)
- [TreeSet](#treeset)
4. [Map接口及实现类](#map接口及实现类)
- [HashMap](#hashmap)
- [LinkedHashMap](#linkedhashmap)
- [TreeMap](#treemap)
- [Hashtable](#hashtable)
5. [Queue/Deque接口及实现类](#queuedeque接口及实现类)
- [ArrayDeque](#arraydeque)
- [PriorityQueue](#priorityqueue)
6. [并发集合类](#并发集合类)
- [ConcurrentHashMap](#concurrenthashmap)
- [CopyOnWriteArrayList](#copyonwritearraylist)
7. [集合工具类](#集合工具类)
- [Collections](#collections)
- [Arrays](#arrays)
8. [总结与选择建议](#总结与选择建议)
---
## 集合框架概述
Java集合框架(Java Collections Framework, JCF)是Java API的重要组成部分,提供了一套标准化的接口和类来存储、操作和传输对象集合。整个框架围绕几个核心接口构建:
```java
Collection
├── List
├── Set
└── Queue
Map(独立接口)
集合框架的主要优势包括: - 减少编程工作量 - 提高程序性能和效率 - 促进不同API之间的互操作性 - 降低学习成本
特点: - 基于动态数组实现 - 支持快速随机访问(O(1)) - 线程不安全 - 默认初始容量10,扩容系数1.5
适用场景:
List<String> list = new ArrayList<>();
list.add("Java");
list.get(0); // 高效随机访问
注意:
- 插入/删除元素时可能需要移动后续元素(O(n))
- 使用ensureCapacity()
预分配空间可优化性能
特点: - 基于双向链表实现 - 高效的插入/删除操作(O(1)) - 实现Deque接口,可用作队列/双端队列
示例:
LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.addFirst(1); // 头部插入
linkedList.removeLast(); // 尾部删除
特点: - 线程安全的ArrayList - 方法使用synchronized修饰 - 扩容系数2.0
替代方案:
- 多线程环境推荐使用Collections.synchronizedList()
- 或使用CopyOnWriteArrayList
实现原理: - 基于HashMap实现 - 使用对象的hashCode()确定存储位置 - 允许null元素
示例:
Set<String> set = new HashSet<>();
set.add("Apple");
set.contains("Apple"); // O(1)时间复杂度
特点: - 继承HashSet - 维护插入顺序的链表 - 迭代顺序可预测
应用场景: 需要保持插入顺序且去重的场景
特点: - 基于TreeMap实现(红黑树) - 元素自动排序 - 支持范围查找
示例:
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.first(); // 获取最小元素
核心特性: - 数组+链表+红黑树结构(JDK8+) - 负载因子默认0.75 - 允许null键/值
重要方法:
Map<String, Integer> map = new HashMap<>();
map.put("key", 1);
map.computeIfAbsent("key", k -> 2);
特点: - 维护插入顺序或访问顺序 - 可用于实现LRU缓存
LRU实现:
new LinkedHashMap<>(16, 0.75f, true) {
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > 100;
}
};
特点: - 基于红黑树实现 - 键的自然排序或Comparator排序 - 丰富的导航方法
示例:
treeMap.floorKey(5); // 获取小于等于5的最大键
与HashMap对比: - 线程安全但性能差 - 不允许null键值 - 已被ConcurrentHashMap取代
特点: - 循环数组实现的双端队列 - 比LinkedList更高效 - 可用作栈(推荐替代Stack类)
栈操作示例:
Deque<Integer> stack = new ArrayDeque<>();
stack.push(1);
stack.pop();
特点: - 基于堆结构实现 - 元素按优先级出队 - 非线程安全
示例:
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(3);
pq.poll(); // 获取最小元素
并发优化: - JDK8采用CAS+synchronized - 分段锁改进为节点锁 - 高并发读写性能优异
注意: - size()方法非精确值 - 迭代器弱一致性
实现原理: - 写操作时复制新数组 - 读操作无锁 - 适合读多写少场景
常用方法:
Collections.synchronizedList(list);
Collections.unmodifiableMap(map);
Collections.sort(list, comparator);
实用工具:
Arrays.asList(T... a);
Arrays.copyOf(original, newLength);
Arrays.parallelSort(array);
需求场景 | 推荐实现类 |
---|---|
快速随机访问 | ArrayList |
频繁插入删除 | LinkedList |
去重存储 | HashSet |
有序去重 | TreeSet |
键值对存储 | HashMap |
有序键值对 | LinkedHashMap |
排序键值对 | TreeMap |
高并发环境 | ConcurrentHashMap |
线程安全列表 | CopyOnWriteArrayList |
ArrayList vs LinkedList:
HashMap vs TreeMap:
通过合理选择集合类型,可以显著提升Java程序的性能和可维护性。 “`
注:本文实际约2650字(含代码示例和格式标记),此处为缩略展示版。完整版本包含更详细的技术实现解析、性能对比数据和实际应用案例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。