Java中的集合(Collection)是用于存储和操作一组对象的容器。Java集合框架(Java Collections Framework)提供了一套丰富的接口和类,用于处理不同类型的集合数据。
集合框架的层次结构
Java集合框架主要分为两大类:
Collection接口:表示一组对象的集合;
Map接口:表示键值对的映射。
Collection接口
List:有序且可重复的集合;
Set:无序且不可重复的集合;
Queue:队列,支持先进先出(FIFO)或优先级排序。
Map接口
Map
表示键值对的映射,键不可重复。
常用集合类
List接口的实现类
ArrayList
基于动态数组实现;
支持快速随机访问;
适合频繁查询的场景。
LinkedList
基于双向链表实现;
支持快速插入和删除;
适合频繁修改的场景。
Vector
类似于
ArrayList
,但是线程安全;性能较低,通常不推荐使用;
Stack
继承自
Vector
,实现栈结构(后进先出,LIFO);
Set接口的实现类
HashSet
基于哈希表实现;
无序且不可重复;
允许存储
null
值。
LinkedHashSet
继承自
HashSet
,维护插入顺序。
TreeSet
基于红黑树实现;
元素按自然顺序或自定义顺序排序。
Queue接口的实现类
LinkedList
可以用作队列或双端队列。
PriorityQueue
基于优先级堆实现;
元素按自然顺序或自定义顺序排序。
ArrayDeque
基于动态数组实现的双端队列。
Map接口的实现类
HashMap
基于哈希表实现;
键值对无序;
允许
null
键和null
值。
LinkedHashMap
继承自
HashMap
,维护插入顺序或访问顺序。
TreeMap
基于红黑树实现;
键按自然顺序或自定义顺序排序。
Hashtable
类似于
HashMap
,但是线程安全;不允许
null
键和null
值。
ConcurrentHashMap
线程安全的
HashMap
,性能优于Hashtable
。
集合的常用操作
List操作
List<String> list = new ArrayList<>();
list.add("A"); // 添加元素
list.add("B");
list.get(0); // 获取元素
list.remove(1); // 删除元素
list.size(); // 获取大小
Set操作
Set<String> set = new HashSet<>();
set.add("A"); // 添加元素
set.add("B");
set.contains("A"); // 检查元素是否存在
set.remove("B"); // 删除元素
set.size(); // 获取大小
Queue操作
Queue<String> queue = new LinkedList<>();
queue.offer("A"); // 添加元素
queue.offer("B");
queue.poll(); // 移除并返回队首元素
queue.peek(); // 返回队首元素但不移除
queue.take(); // 阻塞读取
queue.put(); // 阻塞添加
Map操作
Map<String, Integer> map = new HashMap<>();
map.put("A", 1); // 添加键值对
map.put("B", 2);
map.get("A"); // 获取值
map.remove("B"); // 删除键值对
map.size(); // 获取大小