集合

集合框架    

一、collection

collection接口是所有单列集合的根,然后被List、Set、queue、Stack四大集合继承(容量:jdk1.8版本之前,初识容量,10,超过提升为1.5倍;1.8版本以后,初识容量为0,通过add(),初识容量为10,超过提升1.5倍)

 1、List (有序,可重复)

            1.1  Arraylist  底层由数组实现,有序可重复,线程不安全,查找效率高

            1.2 LinkedList 底层由链表实现,有序可重复,线程不安全,增删效率高

            1.3 Vector 线程安全的Arraylist (初始容量10,扩充时,2倍扩充)

 2、set(元素是无序的,不可以重复,没有索引)

            2.1 HashSet: 底层数据结构是哈希表(存入对象时,先判断hashCode()得到的值,如果一样,再用equals方法比较,在相同就当做同一个元素,不同就在同一个位置上串联存储两个元素),线程不安全,存取速度快

            2.2 TreeSet :底层数据结构是二叉树,线程不安全。可以对Set集合中的元素进行排序

 3、queue:先进先出可以考虑Queue队列

 4、stack:先进后出可以考虑Stack,递归!!!!压栈 ,弹栈

二、Map(双列集合)

Map集合是一个接口,和Collection集合不同的是,它是双列集合,也就是说他所存储的是键值对。(其中键要求唯一,一个键不能对应多个值,Map集合没有Iterator迭代器,如果需要迭代需要转化为单列集合间接迭代)(初始容量为16,0.75时,扩充为原来2倍)

             1、HashMap:底层由数组+链表+红黑树实现,线程不安全,无序,键值可以为null,效率高。

             2、ConcurrentHashMap:底层由数组+链表+红黑树实现,线程安全,无序,键值不可以为null(同步代码块)。

             3、HashTable:底层由数组+链表+红黑树实现,线程安全,已被取代(同步方法)

数据存储时,通过key值得hashcode,计算出hash值,如果引发hash冲突,就在该数组位置引出链表,当链表数超过8,则变为红黑树,链表数小于6,变为数组+链表

三、迭代器

迭代器是针对单列集合使用的,底层主要有三个方法,hasnext()、tnext()、remove();

你可能感兴趣的:(集合)