Java 提供了丰富的集合框架及其数据结构,每个结构和接口都有独特的功能。以下是一些常用的数据结构和接口,以及它们的关键方法:
### 接口及其实现
1. **List 接口**
- 实现类:`ArrayList`、`LinkedList`、`Vector`
- 关键方法:
- `add(E e)`
- `get(int index)`
- `remove(int index)`
- `size()`
- `contains(Object o)`
2. **Set 接口**
- 实现类:`HashSet`、`LinkedHashSet`、`TreeSet`
- 关键方法:
- `add(E e)`
- `remove(Object o)`
- `contains(Object o)`
- `size()`
- `isEmpty()`
3. **Queue 接口**
- 实现类:`LinkedList`、`PriorityQueue`
- 关键方法:
- `offer(E e)`
- `poll()`
- `peek()`
- `remove()`
- `element()`
4. **Map 接口**
- 实现类:`HashMap`、`LinkedHashMap`、`TreeMap`
- 关键方法:
- `put(K key, V value)`
- `get(Object key)`
- `remove(Object key)`
- `containsKey(Object key)`
- `containsValue(Object value)`
- `keySet()`
- `values()`
- `entrySet()`
5. **Deque 接口**
- 实现类:`LinkedList`、`ArrayDeque`
- 关键方法:
- `addFirst(E e)`
- `addLast(E e)`
- `removeFirst()`
- `removeLast()`
- `peekFirst()`
- `peekLast()`
- `offerFirst(E e)`
- `offerLast(E e)`
### 数据结构简介
- **ArrayList**:动态数组,支持快速随机访问,但在插入和删除操作时可能较慢。
- **LinkedList**:双向链表,适合频繁插入和删除操作。
- **HashSet**:不允许重复元素,无序。
- **TreeSet**:有序集合,使用红黑树实现。
- **HashMap**:键值对存储,允许快速查找。
- **LinkedList(作为 Queue 和 Deque)**:同时支持队列和双端队列操作。
- **PriorityQueue**:基于优先级的队列,元素根据自然排序或比较器排序。
这些数据结构和接口在不同场合各有适用,可以根据需要选择合适的数据结构。
当然,以下是对每个关键方法的解释:
### List 接口
1. **`add(E e)`**:
- 将元素 `e` 添加到列表末尾。
2. **`get(int index)`**:
- 返回列表中指定位置的元素。
3. **`remove(int index)`**:
- 移除列表中指定位置的元素,并返回该元素。
4. **`size()`**:
- 返回列表中的元素数量。
5. **`contains(Object o)`**:
- 如果列表中包含指定的元素,则返回 `true`。
### Set 接口
1. **`add(E e)`**:
- 将元素 `e` 添加到集合中,若集合中已存在相同元素,则不改变集合并返回 `false`。
2. **`remove(Object o)`**:
- 从集合中移除指定的元素 `o`。
3. **`contains(Object o)`**:
- 如果集合中包含指定的元素,则返回 `true`。
4. **`size()`**:
- 返回集合中的元素数量。
5. **`isEmpty()`**:
- 如果集合为空,返回 `true`。
### Queue 接口
1. **`offer(E e)`**:
- 将元素 `e` 添加到队列的尾部,成功返回 `true`,失败返回 `false`。
2. **`poll()`**:
- 移除并返回队列头部的元素,如果队列为空,返回 `null`。
3. **`peek()`**:
- 返回队列头部的元素,但不移除,如果队列为空,返回 `null`。
4. **`remove()`**:
- 移除并返回队列头部的元素,如果队列为空,抛出 `NoSuchElementException`。
5. **`element()`**:
- 返回队列头部的元素,但不移除,如果队列为空,抛出 `NoSuchElementException`。
### Map 接口
1. **`put(K key, V value)`**:
- 将指定的键和值的映射关系存入 Map 中,如果键已存在,将替换对应的值。
2. **`get(Object key)`**:
- 返回 Map 中指定键对应的值,如果不存在,返回 `null`。
3. **`remove(Object key)`**:
- 移除 Map 中指定键的条目,并返回对应的值。
4. **`containsKey(Object key)`**:
- 如果 Map 包含指定的键,返回 `true`。
5. **`containsValue(Object value)`**:
- 如果 Map 包含指定的值,返回 `true`。
6. **`keySet()`**:
- 返回 Map 中所有键的集合。
7. **`values()`**:
- 返回 Map 中所有值的集合。
8. **`entrySet()`**:
- 返回 Map 中所有键值对条目的集合。
### Deque 接口
1. **`addFirst(E e)`**:
- 将元素 `e` 添加到双端队列的头部。
2. **`addLast(E e)`**:
- 将元素 `e` 添加到双端队列的尾部。
3. **`removeFirst()`**:
- 移除并返回双端队列头部的元素。
4. **`removeLast()`**:
- 移除并返回双端队列尾部的元素。
5. **`peekFirst()`**:
- 返回双端队列头部的元素,但不移除,如果队列为空,返回 `null`。
6. **`peekLast()`**:
- 返回双端队列尾部的元素,但不移除,如果队列为空,返回 `null`。
7. **`offerFirst(E e)`**:
- 将元素 `e` 添加到双端队列的头部,成功返回 `true`,失败返回 `false`。
8. **`offerLast(E e)`**:
- 将元素 `e` 添加到双端队列的尾部,成功返回 `true`,失败返回 `false`。
这些方法提供各种操作来管理元素的存储、检索和更新,适用于不同的数据结构场景。