/**
* List 1, 【子类or子接口】是 Collection 的子实现, ( -Collection)
* 2, 【数据结构】表示一个线性表
* 3,×【底层结构】空,抽象接口不存在这一项
* 4,×【默认初始长度、扩容】空,抽象接口不存在这一项
* 5, 【有序or无序】有序(有下标,就可以用下标方法。线性表)
* 6, 【可否重复】可以重复
* 7, 【可否null】可以存储null
* 8,×【线程是否安全】空,抽象接口不存在这一项
*
* 两句:是Collection子实现,表示的数据结构是线性表,
* 元素有序可以重复可以存储null
*/
/**
ArrayList 1, 【子类or子接口】是 List 接口的一个具体子实现, (-List -Collection)
2, 【数据结构】表示一个线性表
* 3, 【底层结构】底层是数组
* 4, 【默认初始长度、扩容】默认长度10, 默认扩容: 1.5倍(第一次添加设置10)
* 5, 【有序or无序】有序
* 6, 【可否重复】可以重复
* 7, 【可否null】可以存储null
* 8, 【线程是否安全】线程不安全
*
* 两句:是List接口的一个具体子实现,表示的数据结构是线性表,底层是数组,默认初始长度10,默认扩容机制1.5倍
* 元素有序可以重复可以存储null,线程不安全
*/
/**
* Vector 1, 【子类or子接口】是 List的一个具体子实现, (Vector-List -Collection)
* 2, 【数据结构】表示一个线性表
* 3, 【底层结构】Vector底层是个数组
* 4, 【默认初始长度、扩容】默认长度10, 默认扩容: (有没有大于0增量)?(旧长度+增量):(旧长度2倍)
* 5, 【有序or无序】有序
* 6, 【可否重复】可以重复
* 7, 【可否null】可以存储null
* 8, 【线程是否安全】是线程安全
*
* 三句:是List子实现,表示的数据结构是线性表,底层是数组,默认初始长度10,默认扩容机制取决于有没有大于0增量
* (有没有大于0增量)?(旧长度+增量):(旧长度2倍)
* 元素有序可以重复可以存储null,是线程安全的
*/
/**
* Stack 1, 【子类or子接口】是 Vector的一个具体子实现, (Stack-Vector-List -Collection)
* 2, 【数据结构】表示一个栈
* 3, 【底层结构】Stack底层是个数组(复用父类Vector的)
* 4, 【默认初始长度、扩容】默认长度10, 默认扩容: 2倍
* 5, 【有序or无序】有序
* 6, 【可否重复】可以重复
* 7, 【可否null】可以存储null
* 8, 【线程是否安全】是线程安全
*
* 两句:是Vector具体子实现,表示的数据结构是栈,底层是数组,默认初始长度10,默认扩容机制2倍
* 元素有序、可以重复、可以存储null,是线程安全的
*
* 方法:作为栈,别用普通集合类方法 add等等,可以用但是别用
*/
/**
LinkedList 1, 【子类or子接口】是 List 的子实现, 还是 Deque 的子实现( -List -Deque)
* 2, 【数据结构】可以表示:1.线性表 2.队列 3.双端队列 4.栈
* 3,×【底层结构】空,抽象接口不存在这一项
* 4,×【默认初始长度、扩容】空,抽象接口不存在这一项
* 5, 【有序or无序】有序
* 6, 【可否重复】可以重复
* 7, 【可否null】可以存储null
* 8, 【线程是否安全】不安全
*
* 两句:是 List 子实现,表示的数据结构可以是线性表、队列、双端队列、栈
* 元素有序可以重复可以存储null,线程不安全
*/
/**
Queue 1, 【子类or子接口】是 Collection 的子实现, ( -Collection)
* 2, 【数据结构】表示一个队列
* 3,×【底层结构】空,抽象接口不存在这一项
* 4,×【默认初始长度、扩容】空,抽象接口不存在这一项
* 5, 【有序or无序】有序
* 6, 【可否重复】可以重复
* 7, 【可否null】不允许null
* 8,×【线程是否安全】空,抽象接口不存在这一项
*
* 两句:是 Collection 子实现,表示的数据结构是队列,
* 元素有序可以重复不允许null
*
* 删除poll操作:没有元素可以删除就返回null来标记
*/
/**
Deque 1, 【子类or子接口】是 Queue 的子实现( -Queue)
* 2, 【数据结构】可以表示:1.队列 2.双端队列 3.栈
* 3,×【底层结构】空,抽象接口不存在这一项
* 4,×【默认初始长度、扩容】空,抽象接口不存在这一项
* 5, 【有序or无序】有序
* 6, 【可否重复】可以重复
* 7, 【可否null】不允许 null
* 8,×【线程是否安全】空,抽象接口不存在这一项
*
* 两句:是 Queue 子实现,表示的数据结构可以是队列、双端队列、栈
* 元素有序可以重复不允许存储 null
*/
/**
ArrayDeque 1, 【子类or子接口】是 Deque 的子实现, ( -Deque)
* 2, 【数据结构】表示一个:1.队列 2.双端队列 3.栈
* 3, 【底层结构】循环数组
* 4, 【默认初始长度、扩容】默认初始长度 16, 扩容机制 2倍, 底层数组长度:大于给定值的最小2的幂值
* 5, 【有序or无序】有序
* 6, 【可否重复】可以重复
* 7, 【可否null】不允许null
* 8, 【线程是否安全】不安全
*
* 三句:是Deque子实现,表示的数据结构可以是:1.队列 2.双端队列 3.栈 , 底层是循环数组
* 底层数组长度:大于给定值的最小2的幂值
*
* 元素有序可以重复不允许存储null,线程不安全
*
**/
/**
BlockingQueue 1, 【子类or子接口】是 Queue 的子接口( -Queue)
* 2, 【数据结构】可以表示一个阻塞队列
* 3,×【底层结构】空,抽象接口不存在这一项
* 4,×【默认初始长度、扩容】不能扩容,否则就没有阻塞的必要
* 5,×【有序or无序】?
* 6,×【可否重复】?
* 7,×【可否null】?
* 8,×【线程是否安全】?
*
* 两句:是 Queue 子实现,表示的数据结构是阻塞队列
*
*/
/**
Map 1, 【子类or子接口】是 Map 集合体系的顶级接口( -Queue)
* 2, 【数据结构】可以表示 key-value 键值对数据
* 3,×【底层结构】空,抽象接口不存在这一项
* 4,×【默认初始长度、扩容】空,抽象接口不存在这一项
* 5, 【有序or无序】有的子实现有序,有的子实现无序
* 6, 【可否重复】不允许重复key
* 7, 【可否null】有的子实现允许 null key,有的子实现不允许 null key
* 8,×【线程是否安全】空,抽象接口不存在这一项
*
* 两句:是 Map 集合体系顶级接口,表示的数据结构是 key-value 键值对数据
* 有的子实现有序, 有的子实现无序
* 不允许重复 key
* 有的子实现允许 null 作为 key,有的子实现不允许 null 作为 key
*/
/**
HashMap 1, 【子类or子接口】是 Map 的具体子实现( -Map)
* 2, 【数据结构】可以表示:?
* 3,×【底层结构】数组 + 链表 + 红黑树 jdk1.8后(为了避免数组中某一个链表过长,效率降低)
* 4,×【默认初始长度、扩容】默认初始长度 16,数组扩容机制:2倍(永远是2的整数次幂)
* 5, 【有序or无序】无序
* 6, 【可否重复】不允许重复 key
* 7, 【可否null】允许存储null key
* 8, 【线程是否安全】不安全
* 9, 【新特性】拥有默认加载因子:0.75 可以存储key-value的数据量:数组长度 * 加载因子
* 10,【】通过 key 得到存储数组上下标的位置
* 11,【】创建 HashMap 时给定一个长度,会创建一个大于等于给定长度的数组
* 12,【】HashMap 取 hash 值,移位和异或运算:是为了充分散列(高位参与运算)
* 13,【】什么时候链表转化为红黑树:多个不同的数据经过散列得到同一个位置,构成一个链表。算上新加元素一共8-9个,就从链表转红黑树
* 14,【】红黑树转化回链表:A.不断的删除(删除的元素在红黑树)
* B.扩容:红黑树拆分到两个位置
* 15,【】HashMap的底层数组:是一个 Node 类型:key value hash next
*
* 两句:是 Map 子实现,底层结构是数组+链表+红黑树,默认初始长度16扩容机制2倍
* 元素无序不允许重复允许存储null key,线程不安全
* 默认加载因子
* ...
*/