Java 集合
在 Java 编程中,集合框架(java.util 包)是处理一组对象的强大工具。与数组不同,集合提供了更灵活的数据存储和操作方式。本文将详细介绍 Java 集合框架的核心接口、常用实现类及其应用场景,帮助你更好地理解和使用集合。
1. 什么是集合?
集合是用于存储一组对象的容器。Java 集合框架提供了多种数据结构和算法,方便开发者对数据进行增删改查等操作。集合框架主要分为两大类:
Collection接口:用于存储一组对象。Map接口:用于存储键值对(key-value)。
2. 集合框架的核心接口
2.1 Collection 接口
Collection 是集合框架的根接口,它有三个主要的子接口:
List:有序且允许重复元素的集合。Set:无序且不允许重复元素的集合。Queue:用于存储待处理元素的队列。
2.2 Map 接口
Map 用于存储键值对,键(key)是唯一的,值(value)可以重复。常见的实现类有 HashMap、TreeMap 等。
3. 集合与数组的对比
| 特性 | 数组 | 集合 |
|---|---|---|
| 容量 | 固定大小 | 动态扩展 |
| 数据类型 | 可以存储基本类型和引用类型 | 只能存储引用类型 |
| 功能 | 功能有限 | 提供丰富的操作方法 |
| 适用场景 | 数据量固定且简单 | 数据量动态变化且复杂 |
4. List 集合
List 是有序且允许重复元素的集合,常用的实现类有 ArrayList 和 LinkedList。
4.1 ArrayList
ArrayList 是基于动态数组实现的,适合随机访问和遍历。
常用方法:
add(E e):添加元素。remove(int index):删除指定位置的元素。get(int index):获取指定位置的元素。set(int index, E element):修改指定位置的元素。
示例:
import java.util.ArrayList;
import java.util.List;public class ArrayListDemo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Java");list.add("Python");list.add("C++");System.out.println(list); // 输出: [Java, Python, C++]}
}
4.2 LinkedList
LinkedList 是基于双向链表实现的,适合频繁的插入和删除操作。
常用方法:
addFirst(E e):在链表头部添加元素。addLast(E e):在链表尾部添加元素。removeFirst():删除链表头部的元素。removeLast():删除链表尾部的元素。
示例:
import java.util.LinkedList;public class LinkedListDemo {public static void main(String[] args) {LinkedList<String> list = new LinkedList<>();list.add("Java");list.addFirst("Python");list.addLast("C++");System.out.println(list); // 输出: [Python, Java, C++]}
}
5. Set 集合
Set 是无序且不允许重复元素的集合,常用的实现类有 HashSet 和 TreeSet。
5.1 HashSet
HashSet 是基于哈希表实现的,适合快速查找和去重。
常用方法:
add(E e):添加元素。remove(Object o):删除元素。contains(Object o):判断是否包含指定元素。
示例:
import java.util.HashSet;
import java.util.Set;public class HashSetDemo {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Java");set.add("Python");set.add("Java"); // 重复元素不会被添加System.out.println(set); // 输出: [Java, Python]}
}
5.2 TreeSet
TreeSet 是基于红黑树实现的,元素会按照自然顺序或自定义顺序排序。
示例:
import java.util.TreeSet;
import java.util.Set;public class TreeSetDemo {public static void main(String[] args) {Set<String> set = new TreeSet<>();set.add("Java");set.add("Python");set.add("C++");System.out.println(set); // 输出: [C++, Java, Python]}
}
6. Map 集合
Map 用于存储键值对,常用的实现类有 HashMap 和 TreeMap。
6.1 HashMap
HashMap 是基于哈希表实现的,适合快速查找和插入。
常用方法:
put(K key, V value):添加键值对。get(Object key):根据键获取值。remove(Object key):删除指定键的映射。
示例:
import java.util.HashMap;
import java.util.Map;public class HashMapDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("Java", "编程语言");map.put("Python", "脚本语言");System.out.println(map.get("Java")); // 输出: 编程语言}
}
6.2 TreeMap
TreeMap 是基于红黑树实现的,键会按照自然顺序或自定义顺序排序。
示例:
import java.util.TreeMap;
import java.util.Map;public class TreeMapDemo {public static void main(String[] args) {Map<String, String> map = new TreeMap<>();map.put("Java", "编程语言");map.put("Python", "脚本语言");map.put("C++", "系统编程语言");System.out.println(map); // 输出: {C++=系统编程语言, Java=编程语言, Python=脚本语言}}
}
7. 集合的应用场景
- 动态数据存储:当数据量不确定时,使用集合比数组更灵活。
- 去重:使用
Set集合可以轻松实现数据去重。 - 键值对存储:使用
Map集合可以方便地存储和查找键值对。 - 排序:使用
TreeSet或TreeMap可以实现元素的自动排序。
8. 小结
- 集合框架是 Java 中处理一组对象的强大工具,分为
Collection和Map两大类。 List是有序且允许重复的集合,常用实现类有ArrayList和LinkedList。Set是无序且不允许重复的集合,常用实现类有HashSet和TreeSet。Map是键值对的集合,常用实现类有HashMap和TreeMap。