Java 集合
原文: https://javabeginnerstutorial.com/core-java-tutorial/collection-in-java/
在 JDK 1.2 中添加了集合框架,并在 1.4 -1.6 中对其进行了扩展
集合框架的接口金额类
集合 API 提供了一组接口供您选择,但同时也为您提供了一些可直接使用的具体类。
核心接口
Collection
List
Set
SortedSet
(扩展Set
接口)NavigableSet
(扩展SortedSet
)
Map
SortedMap
(扩展Map
接口)NavigableMap
(扩展SortedMap
)
Queue
实现类
1 Map
HashMap
HashTable
TreeMap
LinkedHashMap
2 Set
HashSet
LinkedHashSet
TreeSet
3 List
ArrayList
Vector
LinkedList
4 Queue
AbstractQueue
ArrayBlockingQueue
ConcurrentLinkedQueue
DelayQueue
LinkedBlockingDeque
LinkedBlockingQueue
LinkedTransferQueue
PriorityBlockingQueue
PriorityQueue
SyncronizedQueue
5 Deque
ArrayDeque
ConcurrentLinkedDeque
6 数组
并非集合框架中的所有类都实现
Collection
接口。没有与
Map
相关的类&接口从Collection
扩展。
集合也可以基于排序和排序进行划分。
1 - 有序集合
有序集合可以以特定顺序(非随机)进行迭代。 例如:数组,哈希表
LinkedHashSet
(迭代顺序是可预测的)- 数组
HashTable
ArrayList
2 – 无序集合
HashSet
3 - 排序的集合
在排序的集合中,集合的顺序是根据某些规则确定的。 例如List
List接口
属性:
关注索引
具有与索引(indexOf
..)相关的方法
按索引位置排序
ArrayList
语法
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
可能有助于决定集合类的因素
为特定问题选择适当的集合时,可以考虑多种因素。 这些因素是:
- 排序 - 元素中的某种排序。 例如,排序顺序,插入顺序或没有特定顺序。
- 重复项 - 可能或可能不想在集合中允许重复的元素。
- 线程安全 - 如果有多个线程访问集合,请确保集合中元素的安全。
- 键值对 - 存储在键值对中。
- 阻塞操作 - 检索元素时等待集合变为非空。
- 随机访问 - 即时检索元素。
- 上限 - 要限制集合可以容纳的最大元素数。
还有其他因素,例如优先级,延迟等。
备忘单
- 集合是存储对象的数据结构。
- 可以添加,删除对象,也可以在集合中对其进行遍历。
- 基本集合有 4 种类型
- 列表: 有序,允许重复,已索引。
- 集:可以有序或可以无序。 不允许复制。
- 映射:不允许使用重复的键。
- 队列:按 FIFO 或优先级进行排序。
ArrayList
:快速迭代&快速随机访问。Vector
:同步方法。LinkedList
:适用于实现栈和队列。HashSet
:快速访问,没有重复,没有排序。LinkedHashSet
:没有重复,按插入顺序进行迭代。TreeSet
:无重复,按排序顺序进行迭代。