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<>();
人一旦有了梦想,怎么活都是有灵魂的!

浙公网安备 33010602011771号