Java学习之集合

JAVA集合学习

  Java的集合分为两大类:Collection和Map。在各自的大类中又分为多个小类,以下慢慢详述:

一、Collection

  Collecton集合又分为List、Set、Queue三大类:

1.1、List集合

  List集合分为ArrayList、LinkedList、Vector三个小类

1.1.1、ArrayList集合的特点(实际使用率高)

  • 排列有序,且值可以重复
  • 底层是使用数组
  • 查询速度快、增删慢(getter()和setter()方法快)
  • 线程不安全
  • 在其存储容量不够时,其容量会变为:当前容量 * 1.5 + 1。(即扩容至当前的1.5倍。ArrayList扩容的本质就是计算出新的扩容数组的size后实例化,并将原有数组内容复制到新数组中去)
  • 初始容量为10

1.1.2、LinkedList集合的特点(实际使用率中)

  • 排列有序、且至值可以重复
  • 底层使用 线性链表(1.5之前采用单向链表, 1.5之后采用双向链表,继承于AbstractSequentialList的双向链表)
  • 查询速度慢、增删快(add()和remove()方法快)
  • 线程不安全
  • inkedList是离散空间所以不需要主动扩容,只会在列表的前面或者后面添加新值

1.1.3、Vector集合的特点(实际使用率低)

  • 排列有序、且值可以重复
  • 底层使用数组
  • 查询速度快、增删慢
  • 线程安全,效率低
  • 当默认容量不够时,会扩容一倍容量

 

 

 

1.2、Set集合

  Set集合分为:HashSet、TreeSet、LinkedHashSet三个小类,三个都是线程不安全的

1.2.1、HashSet集合的特点

  • 排列无序,且值不可重复(无序是指存储的顺序与添加的顺序可能不一样)
  • 底层使用的是Hash表
  • 存取速度快(向Hashset中添加元素, 实际上是把这个元素作为键添加到底层的HashMap中)
  • 内部使用HashMap( HashSet实际上就是底层HashMap的键的集合)

1.2.2、TreeSet集合的特点

  • 排列无序、值不可重复
  • 底层使用的是:二叉树
  • 排序存储
  • 内部使用的是:TreeMap的SortedSet(TreeSet实际上就是底层TreeMap的键的集合)

1.2.3、LinkedHashSet集合的特点

  • 采用Hash表存储数据,使用链表记录存储顺序
  • 内部使用的是:LinkedHashMap

 

 

 

 1.3、Queue集合

  • 在两端存储的List,所以可以使用数组或链表实现

 

小结:

  问:list或set集合有几种创建方法?

  答:5种;除了现有的通过三个子类创建出来的两(三)种线程不安全的方式,还有两个线程安全的方式:

方案一:

和list一样,使用Colletcions这个工具类syn方法类创建个线程安全的set.

Set<String> synSet = Collections.synchronizedSet(new HashSet<>());

方案二:

使用JUC包里面的CopyOnWriteArraySet

Set<String> copySet = new CopyOnWriteArraySet<>();

 

posted @ 2022-03-21 11:52  奋斗中de小伙有潜力  阅读(65)  评论(0)    收藏  举报