Java集合框架全面解析
立即解锁
发布时间: 2025-08-19 00:11:28 阅读量: 8 订阅数: 24 


Java编程基础与Android开发入门
### Java集合框架全面解析
#### 1. 集合框架的必要性
在应用程序开发中,经常需要管理对象集合。虽然数组可以用于此目的,但它并非总是最佳选择。数组具有固定大小,当需要存储数量可变的对象时,很难确定最佳大小。而且,数组只能通过整数索引,不适合将任意对象映射到其他对象。
为了解决这些问题,标准类库提供了集合框架(Collections Framework)和遗留实用工具API,用于为应用程序管理集合。
#### 2. 集合框架基础
集合框架是一组类型(主要位于`java.util`包中),为表示和操作集合提供了标准架构。其架构分为三个部分:
- **核心接口**:提供独立于实现的集合操作接口。
- **实现类**:提供不同的核心接口实现,以满足性能和其他需求。
- **实用工具类**:提供用于对数组排序、获取同步集合等的方法。
##### 2.1 核心接口
核心接口包括`java.lang.Iterable`、`Collection`、`List`、`Set`、`SortedSet`、`NavigableSet`、`Queue`、`Deque`、`Map`、`SortedMap`和`NavigableMap`。它们之间存在继承关系,形成了一个层次结构,如下所示:
```mermaid
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(Iterable):::process --> B(Collection):::process
B --> C(List):::process
B --> D(Set):::process
B --> E(Queue):::process
D --> F(SortedSet):::process
F --> G(NavigableSet):::process
E --> H(Deque):::process
I(Map):::process --> J(SortedMap):::process
J --> K(NavigableMap):::process
```
##### 2.2 实现类
实现类包括`ArrayList`、`LinkedList`、`TreeSet`、`HashSet`、`LinkedHashSet`、`EnumSet`、`PriorityQueue`、`ArrayDeque`、`TreeMap`、`HashMap`、`LinkedHashMap`、`IdentityHashMap`、`WeakHashMap`和`EnumMap`。每个具体类的名称以核心接口名称结尾,表明其基于的核心接口。
此外,还有抽象类`AbstractCollection`、`AbstractList`、`AbstractSequentialList`、`AbstractSet`、`AbstractQueue`和`AbstractMap`,它们提供了核心接口的骨架实现,便于创建具体实现类。
##### 2.3 实用工具类
集合框架提供了两个实用工具类:`Arrays`和`Collections`。
#### 3. Comparable与Comparator
集合实现以某种顺序存储其元素,这个顺序可能是未排序的,也可能根据某种标准(如字母、数字或时间顺序)排序。
排序集合默认根据元素的自然顺序存储元素。例如,`java.lang.String`对象的自然顺序是字典顺序。
集合不能依赖`equals()`方法来确定自然顺序,因为该方法只能判断两个元素是否相等。元素类必须实现`java.lang.Comparable<T>`接口及其`int compareTo(T o)`方法。
当需要以不同于自然顺序的方式存储元素时,可以提供一个比较器(Comparator)。
`compareTo()`方法的规则如下:
- **自反性**:对于任何非空引用值`x`,`x.compareTo(x)`必须返回0。
- **对称性**:对于任何非空引用值`x`和`y`,`x.compareTo(y) == -y.compareTo(x)`必须成立。
- **传递性**:对于任何非空引用值`x`、`y`和`z`,如果`x.compareTo(y) > 0`为真,且`y.compareTo(z) > 0`为真,则`x.compareTo(z) > 0`也必须为真。
比较器是实现`Comparator`接口的对象,该接口提供了两个方法:
- `int compare(T o1, T o2)`:比较两个参数的顺序。当`o1`等于`o2`时返回0,当`o1`小于`o2`时返回负值,当`o1`大于`o2`时返回正值。
- `boolean equals(Object o)`:当`o`“等于”此比较器时返回`true`,即`o`也是一个比较器,并且施加相同的排序。否则返回`false`。
#### 4. Iterable和Collection
大多数核心接口都源于`Iterable`及其`Collection`子接口。`Iterable`描述了可以按某种顺序返回其包含对象的任何对象,它声明了一个`Iterator<T> iterator()`方法,用于返回一个迭代器实例。
`Collection`表示对象的集合,称为元素。该接口提供了许多集合所基于的`Collection`子接口的通用方法,如下表所示:
| 方法 | 描述 |
| --- | --- |
| `boolean add(E e)` | 将元素`e`添加到集合中。如果集合因此被修改,则返回`true`;否则返回`false`。可能会抛出`UnsupportedOperationException`、`ClassCastException`、`IllegalArgumentException`、`NullPointerException`和`IllegalStateException`。 |
| `boolean addAll(Collection<? extends E> c)` | 将集合`c`的所有元素添加到该集合中。如果集合因此被修改,则返回`true`;否则返回`false`。可能会抛出`UnsupportedOperationException`、`ClassCastException`、`IllegalArgumentException`、`NullPoint
0
0
复制全文
相关推荐









