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 接口 }