ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 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`**:无重复,按排序顺序进行迭代。