List-set-queue
# List-set-queue
## ArrayList
- 是一个数组,添加数据,默认值(10)扩容*1.5(扩容时创建一个新的数组,将旧的copyOf到新的里面)
## CopyOnWriteArrayList
- 读写锁问题:当读特别多,写很少的时候,锁大部分时间都会被读抢到,那么写线程就可能会被饿死(一直抢不到锁);
- CopyOnWrite 机制 每添加一个元素就copy(复制)旧数组一份,新数组长度加一 ,新元素放进去,然后修改数组的引用到新数组- 线程安全,读写线程互不影响。 问题:占用内存
CopyOnWriteArrayList 实现了CopyOnWrite
![image.png](https://cos.easydoc.net/31477061/files/kmeiugrp.png)
## set
- 不可重复
- 不保证顺序
- hashmap实现 利用key不重复机制-value一个固定的引用;
![image.png](https://cos.easydoc.net/31477061/files/kmej37ag.png)
## queue
![image.png](https://cos.easydoc.net/31477061/files/kmejabcu.png)
## list -set -map 及其实现类
==list -set -map 及其实现类==
- List 有顺序,可以有重复对象
- LinkedList 基于链表实现,链表内存是散列的,增删快,查找慢;
- ArrayList 基于数组实现,非线程安全,效率高,增删慢,查找快;
- Vector 基于数组实现,线程安全,效率低,增删慢,查找慢;
- Set 集合中的对象无序,并且没有重复对象
- HashSet 底层是由 Hash Map 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法;
- LinkedHashSet 继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMap
- Map 中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复;
- HashMap 基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null
- HashTable 线程安全,低效,不支持 null 值和 null 键;
- LinkedHashMap 是 HashMap 的一个子类,保存了记录的插入顺序;
- TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序 {SortMap 接口 }