# Java 集合

> 原文： [https://javabeginnerstutorial.com/core-java-tutorial/collection-in-java/](https://javabeginnerstutorial.com/core-java-tutorial/collection-in-java/)

在 JDK 1.2 中添加了集合框架，并在 1.4 -1.6 中对其进行了扩展

## 集合框架的接口金额类

集合 API 提供了一组接口供您选择，但同时也为您提供了一些可直接使用的具体类。

## 核心接口

*   `Collection`
*   [`List`](https://javabeginnerstutorial.com/core-java-tutorial/list-collection-tutorial-for-java-beginners/)
*   [`Set`](https://javabeginnerstutorial.com/core-java-tutorial/set-collection-tutorial-for-java-beginners/)
    *   [`SortedSet`](https://javabeginnerstutorial.com/core-java-tutorial/sorted-set-collection-tutorial-for-java-beginners/ "Sorted Set Collection Tutorial for Java Beginners") （扩展`Set`接口）
    *   `NavigableSet`（扩展`SortedSet`）
*   [`Map`](https://javabeginnerstutorial.com/core-java-tutorial/map-collection-tutorial-for-java-beginners/)
    *   [`SortedMap`](https://javabeginnerstutorial.com/core-java-tutorial/sorted-map-collection-tutorial-for-java-beginners/ "Sorted Map Collection Tutorial for Java Beginners") （扩展`Map`接口）
    *   `NavigableMap`（扩展`SortedMap`）
*   `Queue`

## 实现类

### 1 `Map`

*   [`HashMap`](https://javabeginnerstutorial.com/core-java-tutorial/java-collection-hashmap-hashtable/ "Java Collection Hashmap tutorial")
*   `HashTable`
*   `TreeMap`
*   `LinkedHashMap`

### 2 `Set`

*   `HashSet`
*   `LinkedHashSet`
*   `TreeSet`

### 3 `List`

*   `ArrayList`
*   `Vector`
*   `LinkedList`

### 4 `Queue`

*   `AbstractQueue`
    1.  `ArrayBlockingQueue`
    2.  `ConcurrentLinkedQueue`
    3.  `DelayQueue`
    4.  `LinkedBlockingDeque`
    5.  `LinkedBlockingQueue`
    6.  `LinkedTransferQueue`
    7.  `PriorityBlockingQueue`
    8.  `PriorityQueue`
    9.  `SyncronizedQueue`

### 5 `Deque`

*   `ArrayDeque`
*   `ConcurrentLinkedDeque`

### 6 数组

> 并非集合框架中的所有类都实现`Collection`接口。
> 
> 没有与`Map`相关的类&接口从`Collection`扩展。

集合也可以基于排序和排序进行划分。

* * *

### 1 - 有序集合

有序集合可以以特定顺序（非随机）进行迭代。 例如：数组，哈希表

1.  `LinkedHashSet`（迭代顺序是可预测的）
2.  数组
3.  `HashTable`
4.  `ArrayList`

### 2 – 无序集合

1.  `HashSet`

* * *

### 3 - 排序的集合

在排序的集合中，集合的顺序是根据某些规则确定的。 例如`List`

* * *

### `List`接口

**属性**：

关注索引

具有与索引（`indexOf` ..）相关的方法

按索引位置排序

`ArrayList`

**语法**

```java
List l = new ArrayList<E>();
```

**属性**：

*   可增长数组
*   快速迭代
*   快速随机访问
*   按索引排序

* * *

### `Vector`

与`ArrayList`相同，但`Vector`中的方法是同步的。

* * *

### `LinkedList`

**属性**

*   元素彼此双重链接。
*   按索引位置排序
*   适用于实现栈和队列
*   快速插入和删除

* * *

### `Set`接口

设置用于考虑对象唯一性的情况。 不允许重复的对象。 若要确定两个对象是否相等，`Set`使用`equals()`和`hashcode()`方法。

* * *

### `HashSet`

**属性**

*   无序
*   使用对象的哈希码
*   没有重复的对象


### `LinkedHashMap`

*   有序（插入）
*   使用对象的哈希码
*   没有重复的对象

* * *

### `TreeSet`

*   排序（使用树形结构）
*   使用对象的哈希码
*   没有重复的对象

——————————————————————————————

## 并发集合接口

*   `BlockingQueue`**扩展了**`Queue`
*   `TransferQueue`**扩展了**`BlockingQueue`
*   `BlockingDeque`**扩展了**`BlockingQueue`
*   `ConcurrentMap`**扩展了**`Map`

## 并发集合实现

*   `LinkedBlockingQueue`**扩展了**`AbstractQueue`**实现了**`BlockingQueue`
*   `ArrayBlockingQueue`**扩展了**`AbstractQueue`**实现了**`BlockingQueue`
*   `PriorityBlockingQueue`**扩展了**`AbstractQueue`**实现了**`BlockingQueue`
*   `DelayQueue`**扩展了**`AbstractQueue`**实现了**`BlockingQueue`
*   `SynchronousQueue`**扩展了**`AbstractQueue`**实现了**`BlockingQueue`
*   `LinkedBlockingDeque`**扩展了**`AbstractQueue`**实现了**`BlockingDeque`
*   `LinkedTransferQueue`**扩展了**`AbstractQueue`**实现了**`TransferQueue`
*   `CopyOnWriteArrayList`**实现**`List`，`RandomAccess`
*   `CopyOnWriteArraySet`**扩展**`AbstractSet`
*   `ConcurrentSkipListSet`**扩展了**`AbstractSet`**实现了**`NavigableSet`
*   `ConcurrentHashMap`**扩展了**`AbstractMap`**实现了**`ConcurrentMap`
*   `ConcurrentSkipListMap`**扩展了**`AbstractMap`**实现了**`ConcurrentNavigableMap`

## 可能有助于决定集合类的因素

为特定问题选择适当的集合时，可以考虑多种因素。 这些因素是：

1.  **排序** - 元素中的某种排序。 例如，排序顺序，插入顺序或没有特定顺序。
2.  **重复项** - 可能或可能不想在集合中允许重复的元素。
3.  **线程安全** - 如果有多个线程访问集合，请确保集合中元素的安全。
4.  **键值对** - 存储在键值对中。
5.  **阻塞操作** - 检索元素时等待集合变为非空。
6.  **随机访问** - 即时检索元素。
7.  **上限** - 要限制集合可以容纳的最大元素数。

还有其他因素，例如优先级，延迟等。

## 备忘单

1.  **集合**是存储对象的数据结构。
2.  可以添加，删除对象，也可以在集合中对其进行遍历。
3.  基本集合有 4 种类型
4.  **列表**： **有序**，**允许**重复，已索引。
5.  **集**：可以有序或可以无序。 **不允许复制**。
6.  **映射**：不允许使用**重复的**键。
7.  **队列**：按 **FIFO** 或**优先级**进行排序。
8.  **`ArrayList`**：快速迭代&快速随机访问。
9.  **`Vector`**：同步方法。
10.  **`LinkedList`**：适用于实现栈和队列。
11.  **`HashSet`**：快速访问，没有重复，没有排序。
12.  **`LinkedHashSet`**：没有重复，按插入顺序进行迭代。
13.  **`TreeSet`**：无重复，按排序顺序进行迭代。

