目录
1.集合简介
在涉及到一组相同类型的数据存储时,我们总是会想到用数组来存储,但数组的长度是预先设定好的,固定不变的。当要存储的数据量总是要不断变化时,数组就产生了很大的缺陷,这是我们就必须找一个能够允许数据量随意变化的容器来存储这些数据,集合便因此诞生。
Java 所有的集合类都位于 java.util 包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。与数组不同的是,集合只能够存储对象的引用值而不能够存储基本数据类型。
2.Java的集合框架关系图
(1)Collection集合关系图
接口名称 | 作 用 |
---|---|
Iterator 接口 | 集合的输出接口,主要用于遍历输出(即迭代访问)Collection 集合中的元素,Iterator 对象被称之为迭代器。迭代器接口是集合接口的父接口,实现类实现 Collection 时就必须实现 Iterator 接口。 |
Collection 接口 | 是 List、Set 和 Queue 的父接口,是存放一组单值的最大接口。一般很少直接使用此接口直接操作。 |
Queue 接口 | Queue 是 Java 提供的队列接口。 |
Dueue 接口 | 是 Queue 的一个子接口,为双向队列接口。 |
List 接口 | 是最常用的接口。是有序集合,允许有相同的元素。使用 List 能够精确地控制每个元素插入的位置,用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素,与数组类似。 |
Set 接口 | 不包含重复的元素。 |
类名称 | 作 用 |
---|---|
HashSet | 为优化査询速度而设计的 Set。它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素。 |
TreeSet | 基于红黑树实现的 Set 接口,是一个有序的 Set,这样就能从 Set 里面提取一个有序序列。 |
ArrayList | 一个用数组实现的 List,能进行快速的随机访问,效率高而且实现了可变大小的数组。 |
ArrayDueue | 是一个基于数组实现的双端队列,按“先进先出”的方式操作集合元素。 |
LinkedList | 基于链表结构实现的 List,对顺序访问进行了优化,但随机访问的速度相对较慢。此外它还有 addFirst()、addLast()、getFirst()、getLast()、removeFirst() 和 removeLast() 等方法,能把它当成栈(Stack)或队列(Queue)来用。 |
Vector | 与 ArrayList 功能基本相同,但它是线程安全的。 |
LinkedHashSet | 基于哈希表与链表实现的 Set 集合,但与 HashSet 不同的是,它是一个有序的 Set 集合。 |
(2)Map集合关系图
接口名称 | 作 用 |
---|---|
Map 接口 | 是存放一对值的最大接口,即接口中的每个元素都是一对,以 key➡value 的形式保存,并且 key 值不允许重复。 |
类名称 | 作 用 |
---|---|
HashMap | 基于哈希表实现的 Map ,允许使用 null 值和 null 键,且线程不安全的。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 |
TreeMap | 基于红黑树实现的 Map ,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。线程不安全。 |
HashTable | 与 HashMap 作用相同,但不允许 null 值和 null 键,线程安全。 |