集合

集合关系图
HashMap,hashTable,TreeMap
集合

HashMap与HashTable的区别
a,HashMap键值允许为空;HashTable的键值不允许为空
b,HashMap没有synchronized修饰;HashTable是有synchronized修饰,这个也是HashMap非线程安全的原因。
线程安全:多线程访问的时候由于采用了加锁机制,一个线程访问的时候由于加锁保护,其他线程不能进行访问,直到该线程结束其他线程才能访问,避免了数据的不一致或者数据的污染。
c,HashTable默认数组大小是11,HashMap默认数组大小是16
d,HashTable数组+链表,HashMap数组+链表+红黑树
LinkedHashmap是Hashmap的子类,由于Hashmap不能保证顺序持久不变,此类使用一个双重链表来维护元素添加的顺序
e,HashMap是无序的:HashMap是通过key的hashCode来计算索引的,与元素放入的先后顺序没有关系,我们使用hashMap的时候千万不要想着与我们存放数据的先后顺序一直,如果想让HashMap有序的话可以使用LinkedHashMap,LinkedHashMap使用额外的链表保证了插入的顺序。

HashMap与ConcurrentHashMap区别
从ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。
在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中

ArrayList与LinkedList区别
都是实现List接口
a,ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构
b,对于随机访问get,set方法,ArrayList优于linkedList,因为LinkedList要移动指针
b1,因为数组的特性是使用索引能否快速定位到对象的位置,便于快速获取对象。
b2,从数组中删除或插入某一个对象,需要移动后段的元素,会重新调整索引顺序消耗一定的时间。
c,对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
c1,LinkedList因为是链表结构,从链表插入,删除一个对象后,只需要改变一下前后对象的引用即可。

ArrayList什么时候初始化
待补充

ArrayList扩容机制
待补充