一、集合概念:

  • 对象的容器,和数组类似,定义了对多个对象进行操作的常用方法!
  • 集合类存放的是对象的引用类型,不是对象的本身。
  • 集合的长度是不固定的,是可变长的

二、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接口)