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`。

这些方法提供各种操作来管理元素的存储、检索和更新,适用于不同的场景。