java Collections 详解

Java Collections Framework (集合框架) 详解

Java 集合框架 (Java Collections Framework, JCF) 是一套功能强大且灵活的工具,用于存储和处理一组对象。集合框架为各种数据结构提供了标准实现,如列表 (List) 、集合 (Set) 和映射 (Map),极大地简化了数据操作任务。


1. 集合框架的结构

Java 集合框架主要包含以下几个核心接口:

  • Collection :集合的根接口,包含基本操作和特性,子接口包括 List、Set 和 Queue。
  • Map:映射接口,用于存储键-值对。
集合框架的层次结构
复制代码
                Collection
                   |
    ---------------------------------
    |               |               |
   List            Set             Queue
    |               |               |
  ArrayList      HashSet        PriorityQueue
  LinkedList     LinkedHashSet  ArrayDeque
  Vector         TreeSet

                   Map
                    |
     --------------------------------
     |                              |
   HashMap                       SortedMap
   LinkedHashMap                 TreeMap
   WeakHashMap
   IdentityHashMap

2. 主要接口及其实现

2.1 List 接口

List 接口表示一个有序的集合,允许重复元素。List 可以通过索引访问元素。

  • 主要实现类 :
    • ArrayList :
      • 基于动态数组,访问速度快,插入和删除效率相对较低。
      • 适合随机访问场景。
    • LinkedList :
      • 基于双向链表,插入和删除效率高,但访问速度较慢。
      • 适合频繁插入、删除操作的场景。
    • Vector :
      • 线程安全的动态数组,类似 ArrayList,但性能较低。

示例:

java 复制代码
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
System.out.println(list.get(1)); // 输出: B

2.2 Set 接口

Set 接口表示一个无序集合,不允许重复元素。

  • 主要实现类 :
    • HashSet :
      • 基于哈希表实现,不保证元素的顺序。
      • 插入、删除和查找操作的效率高。
    • LinkedHashSet :
      • 保持插入顺序的 HashSet,基于链表和哈希表实现。
    • TreeSet :
      • 基于红黑树实现,元素有序,支持排序操作。

示例:

java 复制代码
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A"); // 重复元素不会被添加
System.out.println(set); // 输出: [A, B]

2.3 Queue 接口

Queue 接口表示一个队列,通常遵循"先入先出" (FIFO) 原则。

  • 主要实现类 :
    • PriorityQueue :
      • 基于优先级堆实现,元素按自然顺序或自定义比较器排序。
    • ArrayDeque :
      • 双端队列,允许在两端插入和删除元素,效率高于 LinkedList。

示例:

java 复制代码
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.poll(); // 移除并返回队首元素
System.out.println(queue); // 输出: [2]

2.4 Map 接口

Map 接口表示一个键值对集合,每个键最多只能映射到一个值。

  • 主要实现类 :
    • HashMap :
      • 基于哈希表实现,不保证顺序,允许 null 键和值。
      • 适合插入、删除和查找操作。
    • LinkedHashMap :
      • 保持插入顺序的 HashMap,使用链表维护顺序。
    • TreeMap :
      • 基于红黑树实现,键按自然顺序或自定义顺序排序。
    • WeakHashMap :
      • 使用弱引用的哈希表,便于垃圾回收。
    • IdentityHashMap :
      • 使用 == 比较键的哈希表,而不是 equals() 方法。

示例:

java 复制代码
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
System.out.println(map.get("A")); // 输出: 1

3. 常用方法

3.1 List 接口的方法
  • add(E e): 添加元素到列表末尾。
  • get(int index): 获取指定索引的元素。
  • remove(int index): 移除指定索引的元素。
  • set(int index, E element): 替换指定索引的元素。
  • size(): 返回列表的大小。
3.2 Set 接口的方法
  • add(E e): 添加元素,如果已存在,则不添加。
  • remove(Object o): 移除指定元素。
  • contains(Object o): 检查集合是否包含某元素。
  • size(): 返回集合的大小。
3.3 Queue 接口的方法
  • offer(E e): 添加元素到队列尾部。
  • poll(): 移除并返回队首元素,若队列为空则返回 null。
  • peek(): 返回队首元素但不移除,若队列为空则返回 null。
3.4 Map 接口的方法
  • put(K key, V value): 添加键值对。
  • get(Object key): 获取指定键的值。
  • remove(Object key): 移除指定键的键值对。
  • containsKey(Object key): 检查是否包含指定键。
  • keySet(): 返回所有键的集合。
  • values(): 返回所有值的集合。

4. 集合工具类:Collections 和 Arrays

4.1 Collections 类

Collections 是一个工具类,提供了许多静态方法来操作集合,如排序、搜索、同步化等。

  • Collections.sort(List<T> list): 对列表进行排序。
  • Collections.shuffle(List<?> list): 随机打乱列表中的元素。
  • Collections.max(Collection<? extends T> coll): 返回集合中的最大元素。
  • Collections.min(Collection<? extends T> coll): 返回集合中的最小元素。

示例:

java 复制代码
List<Integer> numbers = Arrays.asList(5, 2, 8, 1);
Collections.sort(numbers);
System.out.println(numbers); // 输出: [1, 2, 5, 8]
4.2 Arrays 类

Arrays 类提供了一些方法来操作数组,如排序、搜索、转换为集合等。

  • Arrays.asList(T... a): 将数组转换为 List。
  • Arrays.sort(int[] a): 对数组进行排序。
  • Arrays.binarySearch(int[] a, int key): 使用二分查找法查找元素。

示例:

java 复制代码
int[] arr = {5, 2, 8, 1};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // 输出: [1, 2, 5, 8]

5. 线程安全的集合

  • 使用 Collections.synchronizedList、synchronizedSet、synchronizedMap :
    • List<String> synchronizedList = Collections.synchronizedList(new ArrayList<>());
  • 使用并发集合类 (在 java.util.concurrent 包中) :
    • ConcurrentHashMap:线程安全的 HashMap。
    • CopyOnWriteArrayList:线程安全的 ArrayList。

6. 迭代集合

6.1 使用 Iterator 迭代

Iterator 是一个用于遍历集合的接口,支持 remove() 方法来安全地移除元素。

示例:

java 复制代码
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    System.out.println(item);
}
6.2 使用增强型 for 循环

示例:

java 复制代码
for (String item : list) {
    System.out.println(item);
}

7. 总结与选择指南

  • List :需要有序集合时使用,选择 ArrayList(访问快)或 LinkedList(插入、删除快)。
  • Set :需要无序、不重复集合时使用,选择 HashSet(无序)或 TreeSet(有序)。
  • Queue :需要先进先出的集合时使用,选择 LinkedList
    或 PriorityQueue。
  • Map :需要键值对集合时使用,选择 HashMap(无序)或 TreeMap(有序)。

Java 集合框架为数据处理提供了丰富的工具,理解各个实现类的特性和用法,能帮助你写出高效、简洁的代码。

相关推荐
2301_780789663 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
第九序言T3 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
Java后端的Ai之路4 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
qq_426003964 小时前
UI自动化高频次登录login限流解决方案
python·ui·自动化
Sakura_j_h_4 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
学长毕设4 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn5 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川5 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵5 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
程序喵大人5 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型