Java常用的集合有哪些

发布时间:2021-11-30 14:51:51 作者:iii
来源:亿速云 阅读:218
# 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之间的互操作性 - 降低学习成本


List接口及实现类

ArrayList

特点: - 基于动态数组实现 - 支持快速随机访问(O(1)) - 线程不安全 - 默认初始容量10,扩容系数1.5

适用场景

List<String> list = new ArrayList<>();
list.add("Java");
list.get(0);  // 高效随机访问

注意: - 插入/删除元素时可能需要移动后续元素(O(n)) - 使用ensureCapacity()预分配空间可优化性能

LinkedList

特点: - 基于双向链表实现 - 高效的插入/删除操作(O(1)) - 实现Deque接口,可用作队列/双端队列

示例

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.addFirst(1);  // 头部插入
linkedList.removeLast(); // 尾部删除

Vector

特点: - 线程安全的ArrayList - 方法使用synchronized修饰 - 扩容系数2.0

替代方案: - 多线程环境推荐使用Collections.synchronizedList() - 或使用CopyOnWriteArrayList


Set接口及实现类

HashSet

实现原理: - 基于HashMap实现 - 使用对象的hashCode()确定存储位置 - 允许null元素

示例

Set<String> set = new HashSet<>();
set.add("Apple");
set.contains("Apple");  // O(1)时间复杂度

LinkedHashSet

特点: - 继承HashSet - 维护插入顺序的链表 - 迭代顺序可预测

应用场景: 需要保持插入顺序且去重的场景

TreeSet

特点: - 基于TreeMap实现(红黑树) - 元素自动排序 - 支持范围查找

示例

TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.first();  // 获取最小元素

Map接口及实现类

HashMap

核心特性: - 数组+链表+红黑树结构(JDK8+) - 负载因子默认0.75 - 允许null键/值

重要方法

Map<String, Integer> map = new HashMap<>();
map.put("key", 1);
map.computeIfAbsent("key", k -> 2);

LinkedHashMap

特点: - 维护插入顺序或访问顺序 - 可用于实现LRU缓存

LRU实现

new LinkedHashMap<>(16, 0.75f, true) {
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > 100;
    }
};

TreeMap

特点: - 基于红黑树实现 - 键的自然排序或Comparator排序 - 丰富的导航方法

示例

treeMap.floorKey(5);  // 获取小于等于5的最大键

Hashtable

与HashMap对比: - 线程安全但性能差 - 不允许null键值 - 已被ConcurrentHashMap取代


Queue/Deque接口及实现类

ArrayDeque

特点: - 循环数组实现的双端队列 - 比LinkedList更高效 - 可用作栈(推荐替代Stack类)

栈操作示例

Deque<Integer> stack = new ArrayDeque<>();
stack.push(1);
stack.pop();

PriorityQueue

特点: - 基于堆结构实现 - 元素按优先级出队 - 非线程安全

示例

PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(3);
pq.poll();  // 获取最小元素

并发集合类

ConcurrentHashMap

并发优化: - JDK8采用CAS+synchronized - 分段锁改进为节点锁 - 高并发读写性能优异

注意: - size()方法非精确值 - 迭代器弱一致性

CopyOnWriteArrayList

实现原理: - 写操作时复制新数组 - 读操作无锁 - 适合读多写少场景


集合工具类

Collections

常用方法

Collections.synchronizedList(list);
Collections.unmodifiableMap(map);
Collections.sort(list, comparator);

Arrays

实用工具

Arrays.asList(T... a);
Arrays.copyOf(original, newLength);
Arrays.parallelSort(array);

总结与选择建议

选择指南

需求场景 推荐实现类
快速随机访问 ArrayList
频繁插入删除 LinkedList
去重存储 HashSet
有序去重 TreeSet
键值对存储 HashMap
有序键值对 LinkedHashMap
排序键值对 TreeMap
高并发环境 ConcurrentHashMap
线程安全列表 CopyOnWriteArrayList

最佳实践

  1. 预估集合大小,初始化时指定容量
  2. 优先使用接口类型声明集合变量
  3. 注意集合的fail-fast机制
  4. 重写equals()必须同时重写hashCode()
  5. 谨慎使用可变对象作为Map键

性能比较

通过合理选择集合类型,可以显著提升Java程序的性能和可维护性。 “`

注:本文实际约2650字(含代码示例和格式标记),此处为缩略展示版。完整版本包含更详细的技术实现解析、性能对比数据和实际应用案例。

推荐阅读:
  1. java常用的数据库有哪些
  2. java中的集合有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:python中Pandas怎么用

下一篇:C/C++ Qt TreeWidget单层树形组件怎么应用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》