List和set
1、List插入有序,元素可以重复。Set插入无序,元素不可以重复。
例如:先有1,1,2,3需要分别使用list跟set容器进行存储。那么list容器将会将以上全部进行存储到容器中,且按加入容器的的顺序进行存放。而set进行存储的时候只会存储1,2,3。且打印出来也不一定会按加入的顺序进行排序。
2、List集合常用子类
- ArrayList:1)、底层数据结构由数组构成。
2)、线程不安全。
3)、扩容增量:容器不够装需要自动扩容,每次会按1.5被进行扩容。默认初始化容量为10。适用于查询。如:原来容量为10,一次扩容后为15。
4)、删除元素时不会自动减少容量,若想对集合容量减少则调⽤trimToSize()。
- LinkedList:1)、底层数据结构由数组构成。
2)、线程不安全。
3)、适用于对容器数据的增删改。
- Vector:1)、底层数据结构由数组构成。
2)、线程安全。
3)、扩容增量:容器不够装需要自动扩容,每次会按2倍被进行扩容。默认初始化容量为10。如:原来容量为10,一次扩容后为20。
4)、因为线程同步,可避免同时写而引起的数据不一致,但是由于同步也会导致访问比ArrayList慢。
PS:如果想让ArrayList也进行线程同步,那么可以做以下操作。
//需进行同步的集合 List<Object> list = new ArrayList(); List syncList=Collections.synchronizedList(list);
3、Set集合常用子类
- HashSet:1)、底层结构是哈希表(是一个元素为链表的数组)
2)、加载因子为0.75:即当容器内 元素个数 超过 容量长度的0.75倍 时,进行扩容
3)、扩容增量:原容量的 1 倍。默认容量为16。如:原来容量为16,一次扩容后为32。
- TreeSet: 1)、底层数据结构是红⿊树(是⼀个⾃平衡的⼆叉树)
2)、排序有序。
- LinkedHashSe:底层数据结构由哈希表和链表组成。