Java集合类(Collection和Map)详解
Java 的集合类是一些常用的数据结构,如列表、树集和哈希表等。
Java 集合就像一个容器,专门用来存储数量不等的对象(实际上是对象的引用,但习惯称为对象),这些对象可以是任意数据类型,并且长度可变,可以按照规范实现一些常用的操作和算法。开发者在使用 Java 的集合类时,不必考虑数据结构和算法的具体实现细节,根据需要直接使用这些集合类,调用相应的方法即可,从而提高开发效率。
Collection 集合体系的架构图如下图所示,其中,实线表示实现关系,虚线表示继承关系。

图 1 Collection集合体系的架构图
Collection 接口有以下 3 个子接口:
Collection 是所有单列集合的根接口,因此,在 Collection 接口中定义了单列集合的一些通用方法,使用这些方法可以操作所有的单列集合。Collection 接口中的主要方法如下表所示。
实例:
Map 集合体系的架构图如下图所示,其中,实线表示继承关系,虚线表示实现关系。

图 2 Map集合体系的架构图
Map 接口的实现类用于保存具有映射关系的数据,即 Map 保存的每项数据都是由“键(Key)/值(Value)”对组成的。Map 中的键是不可重复的,用于标识集合中的每项数据,通过键可以获取 Map 集合中的数据项,即值。
实例:
虽然 Iterator 是一个接口,但是开发者无须手动开发 Iterator 接口的实现类。这是因为 Collection 接口的实现类中均已提供了对应的 Iterator 接口的实现类。开发者直接调用 Collection 接口的 iterator() 方法,即可获取当前集合对象对应的迭代器对象。
Iterator 接口中的方法如下表所示。
实例:
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
Java 集合就像一个容器,专门用来存储数量不等的对象(实际上是对象的引用,但习惯称为对象),这些对象可以是任意数据类型,并且长度可变,可以按照规范实现一些常用的操作和算法。开发者在使用 Java 的集合类时,不必考虑数据结构和算法的具体实现细节,根据需要直接使用这些集合类,调用相应的方法即可,从而提高开发效率。
集合框架的层次结构
Java 所有的集合类都位于 java.util 包中,按照存储结构可以分为两大类,即单列集合 Collection 和双列集合 Map。Collection 和 Map 是集合框架的根接口,各自还派生出了一些子接口或实现类。Collection 集合体系的架构图如下图所示,其中,实线表示实现关系,虚线表示继承关系。

图 1 Collection集合体系的架构图
Collection 接口有以下 3 个子接口:
- List 接口:有序且可以重复的集合;
- Queue 接口:队列集合,用来存储满足 FIFO(First In First Out)原则的容器,主要实现类为 ArrayDeque(基于数组实现的双端队列)、LinkedList(双向链表)和 PriorityQueue(自动排序的队列);
- Set 接口:无序且不可重复的集合。
Collection 是所有单列集合的根接口,因此,在 Collection 接口中定义了单列集合的一些通用方法,使用这些方法可以操作所有的单列集合。Collection 接口中的主要方法如下表所示。
方法声明 | 功能描述 |
---|---|
boolean add(E e) | 向集合中添加新元素。 |
boolean addA1l(Collection c) | 将指定集合的所有元素添加到当前集合中。 |
boolean remove(Object o) | 删除当前集合中包含的指定元素。 |
void clear() | 删除当前集合中的所有元素。 |
boolean contains(Obiect o) | 如果该集合中包含指定元素,那么返回 true。 |
boolean containsAll(Collection c) | 如果该集合中包含集合 c 的所有元素,那么返回 true。 |
boolean isEmpty() | 当前集合是否为空。 |
Iterator iterator() | 返回一个 Iterator 对象,可以用来遍历当前集合。 |
boolean retainAll(Collection c) | 保留当前集合中与指定集合相同的所有元素,若该操作改变了当前集合,则返回 true。 |
int size() | 返回当前集合中元素的数目。 |
Object[] toArray() | 返回当前集合中所有元素组成的数组。 |
实例:
import java.util.ArrayList; import java.util.List; public class CollectionExample { public static void main(String[] args) { // 创建一个List集合 List<String> fruits = new ArrayList<>(); // 向集合中添加元素 fruits.add("Apple"); fruits.add("Banana"); fruits.add("Cherry"); // 访问集合中的元素 for (String fruit : fruits) { System.out.println(fruit); } // 检查集合是否包含某个元素 if (fruits.contains("Banana")) { System.out.println("Fruits list contains Banana."); } // 从集合中移除元素 fruits.remove("Cherry"); // 获取集合的大小 System.out.println("Number of fruits: " + fruits.size()); } }运行结果为:
Apple
Banana
Cherry
Fruits list contains Banana.
Number of fruits: 2
Map 集合体系的架构图如下图所示,其中,实线表示继承关系,虚线表示实现关系。

图 2 Map集合体系的架构图
Map 接口的实现类用于保存具有映射关系的数据,即 Map 保存的每项数据都是由“键(Key)/值(Value)”对组成的。Map 中的键是不可重复的,用于标识集合中的每项数据,通过键可以获取 Map 集合中的数据项,即值。
实例:
import java.util.HashMap; import java.util.Map; public class MapExample { public static void main(String[] args) { // 创建一个Map集合 Map<String, Integer> ageMap = new HashMap<>(); // 向Map中添加键值对 ageMap.put("Alice", 25); ageMap.put("Bob", 30); ageMap.put("Charlie", 22); // 访问Map中的元素 for (Map.Entry<String, Integer> entry : ageMap.entrySet()) { System.out.println(entry.getKey() + " is " + entry.getValue() + " years old."); } // 通过键获取值 int aliceAge = ageMap.get("Alice"); System.out.println("Alice's age: " + aliceAge); // 检查Map是否包含某个键 if (ageMap.containsKey("Bob")) { System.out.println("Age map contains Bob."); } // 从Map中移除键值对 ageMap.remove("Charlie"); // 获取Map的大小 System.out.println("Number of people: " + ageMap.size()); } }运行结果为:
Bob is 30 years old.
Alice is 25 years old.
Charlie is 22 years old.
Alice's age: 25
Age map contains Bob.
Number of people: 2
迭代器接口
迭代器(Iterator)接口是 Java 集合框架中的一员,诞生于 JDK 1.2,主要用于迭代访问(即遍历)Collection 中的元素,因此,Iterator 也被称为迭代器。虽然 Iterator 是一个接口,但是开发者无须手动开发 Iterator 接口的实现类。这是因为 Collection 接口的实现类中均已提供了对应的 Iterator 接口的实现类。开发者直接调用 Collection 接口的 iterator() 方法,即可获取当前集合对象对应的迭代器对象。
Iterator 接口中的方法如下表所示。
方法声明 | 功能描述 |
---|---|
default void forEachRemaining (Consumer<?super E> action) | 对每个剩余元素执行给定的操作,直到所有元素都被处理或动作引发异常。 |
boolean hasNext() | 判断是否有下一个可访问的元素,若有则返回 true,否则返回 false。 |
E next() | 返回下一个元素。 |
void remove() | 删除当前元素,该方法必须紧跟在一个元素的访问后执行。 |
forEach() | 从JDK 1.8 开始提供,该方法所需的参数是 Lambda 表达式,使集合的迭代操作更加简化。 |
实例:
import java.util.ArrayList; import java.util.Iterator; public class IteratorExample { public static void main(String[] args) { // 创建一个List集合 ArrayList<String> numbers = new ArrayList<>(); numbers.add("One"); numbers.add("Two"); numbers.add("Three"); // 获取迭代器 Iterator<String> iterator = numbers.iterator(); // 使用迭代器遍历集合 while (iterator.hasNext()) { String number = iterator.next(); System.out.println(number); } // 使用迭代器移除元素 iterator = numbers.iterator(); while (iterator.hasNext()) { if ("Two".equals(iterator.next())) { iterator.remove(); } } // 再次打印集合以验证元素已被移除 System.out.println("After removal: " + numbers); } }运行结果为:
One
Two
Three
After removal: [One, Three]
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。