集合知识概总
1.集合概念以及分类
2.常用集合特点
3.集合遍历
4.泛型知识
一、集合概念以及分类
1、集合介绍
1.1集合概念
Java中提供了一系列特殊的类统称为集合,像一个容器,专门用来存储Java对象(实际上是对象的引用,但习惯上成为对象)。
1.2集合特点
集合存储对象可以是任意引用类型、集合长度可变。
2、集合分类
2.1单列集合
Collection
: 单列集合根接口。用于存储一系列符合规定泛型类型的元素。Collection
有两个重要的子接口,分别是List
和Set
,其实还有一个Queue
,只不过不常用。
- 单列集合继承体系图:
2.2 双列集合
Map
是双列集合的根接口。用于存储具有键(key)和值(value)映射关系的元素。Map
主要的实现接口有TreeMap
和HashMap
。
- 双列集合集成体系图:
下面介绍具体集合类的特点,不再总结方法,方法查找Java API文档
二、List列表
1.List集合概念
java.util.List
接口继承于Collection
接口,是单列集合的重要分支之一,实现List的子类主要有ArrayList
和LinkedList
比较常用,两者底层数据结构不同。
2.List集合特点
- List存取数据有序,即存入顺序和取出顺序一样;
- List有索引,并提供带索引的方法操作方法,如
get (int index)
,索引也是从0开始; - List中可以允许存储重复数据。
3.ArrayList
List
接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null
在内的所有元素。除了实现 List
接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小(容量)。是最常用的集合类!
- 特点:
ArrayList
集合数据存储的结构是数组结构;- 固定索引存储对应数据,查找块,增删慢;
- 不是线程同步。
4.LinkedList
List
接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null
)。除了实现 List
接口外方法外,LinkedList
类还为在列表的开头及结尾 get
、remove
和 insert
元素提供了统一的命名方法。此类实现 Deque
接口,为 add
、poll
提供先进先出队列操作,以及其他堆栈和双端队列操作。
- 特点:
LinkedList
集合数据存储的结构是双向链表;- 有索引,但和数组索引还不一样,但使用与数组索引基本一样;
- 查找慢,增删块;
- 不是线程同步。
三、Set集合
1.Set集合概念
java.util.Set
接口同样继承于Collection
接口,它与Collection
接口中的方法基本一致,并没有``Collection接口对进行功能上扩充,只是比
Collection接口更加严格。实现
Set接口的子类主要有
HashSet和
TreeSet(内部采用平衡二叉树来存储数据,较复杂,可另百度了解)以及
HashSet的子类
LinkedHashSet`。
2. Set特点
- Set集合存取可能有序(LinkedHashSet),也可能无序(HashSet);
- Set集合没有索引;
- Set集合不允许存储重复数据。
3. HashSet
此类实现 Set
接口,由哈希表(实际上是一个 HashMap
实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null
元素。 保证元素唯一性的方式依赖于:hashCode
与equals
方法。
-
特点:
HashSet
的底层实现就是HashMap
—哈希表;- 无序存储,没有索引;
- 不能存储重复数据;
- 由于
HashSet
存储纯数字或字符时,由于其hashCode
值顺序与现实顺序一致,所以会自动排序! - 要想存储自定义引用类型,可以重写hashCode()和equals()方法,自定义重复规则;
- 不是线程同步。
-
存储数据结构—哈希表:
jdk8之前:数组+链表
jdk8之后:数组+链表+红黑树
(当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查