一、集合概念:
- 对象的容器,和数组类似,定义了对多个对象进行操作的常用方法!
- 集合类存放的是对象的引用类型,不是对象的本身。
- 集合的长度是不固定的,是可变长的
二、List集合(Collection的子接口)
List集合的特点:有序、有下标、元素可以重复
1、ArrayList类集合
- 存储方式:数组
- 特点:查询遍历快,运行效率快
- 缺点:JDK1.2版本,增删慢,线程不安全
2、LinkedLIst类集合(目前不常用)
- 存储方式:双向链表
- 特点:增删快
- 缺点:查找遍历速度慢
3、Vector类集合
- 存储方式:数组
- 特点:查询遍历快,线程安全
- 缺点:增删慢,运行慢
三、Set集合(Collection的子接口)
Set集合的特点:无序、无下标、元素不允许重复
1、HashSet类集合
- 存储结构:哈希表(数组+链表+红黑树)
- 存储过程:1、根据HashCode计算保存的位置,如果位置为空,则直接保存,如果不为空,则执行第二步。2、执行equals方法,如果equals方法为true,则认为是重复的,否则形成链表!
2、TreeSet类集合(SortedSet(SortedSet是Set接口的子接口)接口的子接口)
- 存储结构:红黑树
- 基于排列顺序实现元素不重复
- 元素对象的类型必须实现Comparable接口,指定排序规则
- 通过CompareTo方法确定是否为重复元素!
四、Map集合
Map集合的特点:存储一对数据(Key-value),无序、无下标,键不可重复,值可以重复!
1、HashMap类集合
- 存储结构:哈希表(数组+链表+红黑树)
- 特点:跟Map父接口的特点一样,运行效率快
- 缺点:线程不安全
- HashMap刚创建时,table是null,为了节省空间,当添加第一个元素时,table容量调整为16
- 当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容后大小为原来的2倍!目的是减少调整元素的个数
- jdk1.8 当每个链表长度大于8,并且元素个数大于等于64时,会调整为红黑树,目的提高执行效率
- jdk1.8 当链表长度小于6时,调整成链表
- jdk1.8 以前,链表时头插入,jak1.8以后是尾插入!
- HashMap :JDK1.2版本,线程不安全,运行效率快,允许用null作为key或者是value
2、TreeMap(SortedMap是map的子接口,TreeMap继承了SortedMap的接口)
- 存储结构:红黑树
- 特点:可以对Key进行自动排序,增删快
- 缺点:查询较慢
五、Collections工具类
- 集合工具类,定义了除了存取以外的集合常用方法。
- public static void reverse(List<?> list) //反转集合中的元素的顺序
- public static void shuffle(List<?> list) //随机重置集合元素的顺序
- public static void sort(List list) //升序排序(元素类型必须实现Comparable接口)