Skip to content

Java 集合框架

Java 集合框架(Java Collections Framework)提供了一套完整的接口和类,用于存储和操作对象集合。它是 Java 编程中最重要的工具之一。

集合框架层次结构

Java 集合框架主要分为两大类:

  1. Collection 接口:存储单个元素的集合
  2. Map 接口:存储键值对的映射

Collection 接口

List(列表)

List 是有序的集合,允许重复元素。

ArrayList

基于数组实现的动态列表,随机访问性能好,但插入和删除操作较慢。

java
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("Java"); // 允许重复

// 遍历
for (String item : list) {
    System.out.println(item);
}

LinkedList

基于双向链表实现,插入和删除操作性能好,但随机访问较慢。

java
List<String> list = new LinkedList<>();
list.add("First");
list.add("Last");

Set(集合)

Set 是不允许重复元素的集合。

HashSet

基于哈希表实现,无序,查找性能好。

java
Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Java"); // 重复元素不会被添加

System.out.println(set.size()); // 输出:2

TreeSet

基于红黑树实现,有序(按自然顺序或比较器),查找性能好。

java
Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);
// 输出:[1, 2, 3],自动排序

Map 接口

Map 存储键值对(key-value),键不能重复。

HashMap

基于哈希表实现,无序,查找性能好。

java
Map<String, Integer> map = new HashMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put("Java", 3); // 覆盖之前的值

System.out.println(map.get("Java")); // 输出:3

TreeMap

基于红黑树实现,按键的自然顺序或比较器排序。

java
Map<String, Integer> map = new TreeMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put("C++", 3);
// 按键的字母顺序排序

常用操作

遍历集合

java
// for-each 循环
for (String item : list) {
    System.out.println(item);
}

// 迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

// Stream API(Java 8+)
list.stream().forEach(System.out::println);

集合工具类 Collections

java
// 排序
Collections.sort(list);

// 反转
Collections.reverse(list);

// 查找
int index = Collections.binarySearch(list, "Java");

选择集合类型

  • 需要有序且允许重复:使用 ArrayListLinkedList
  • 需要无序且不允许重复:使用 HashSet
  • 需要有序且不允许重复:使用 TreeSet
  • 需要键值对映射:使用 HashMapTreeMap
  • 需要线程安全:使用 ConcurrentHashMapCopyOnWriteArrayList 等并发集合

总结

Java 集合框架提供了丰富的数据结构,选择合适的集合类型可以提高程序的性能和可读性。理解各种集合的特点和适用场景,是 Java 开发的基础技能。