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:底层数据结构由哈希表和链表组成。
原文地址:https://www.cnblogs.com/buzheng/p/12564780.html