HashMap原理:
存储方式键值对,把键转为hashcode值存入链表头中,取值时候把key转为hashcode直接get到 ; jdk1.8: 超过6个元素就变成红黑树,小于等于则转为链表
LinkedHashMap原理:
双向链表根据插入Map先后顺序维护了一个双向链表的头尾head,tail;
还增加了 before,after 两个分别指向双向链表中前后节点的属性;
默认按照插入顺序排序:双向的就可以实现,当插入的元素就放在表头部;
访问的顺序:根据访问的数据移除掉,插入到尾部;
ConcurrentHashMap原理:
双数组链表map的结构,数组中存hashmap;
线程安全:Segment数组会加锁可支持16线程;
ArrayList原理:
动态数组自增长,非同步,有序的、实现了RandomAccess(可随机访问)Cloneable(可拷贝)Serializable(可序列化)
长于随机访问元素,中间插入和移除元素比较慢,在插入时,必须创建空间并将它的所有引用向前移动,这会随着ArrayList的尺寸增加而产生高昂的代价,底层由数组支持。
底层原理:https://blog.csdn.net/weixin_36378917/article/details/81812210
LinkedList原理:
特点:有序的;
底层是双向链表插入移除快
查询慢:需要移动指针遍历整个表
通过代价较低的在List中间进行插入和删除操作,只需要链接新的元素,而不必修改列表中剩余的元素,无论列表尺寸如何变化,其代价大致相同,提供了优化的顺序访问,随机访问相对较慢,特性较ArrayList更大,而且还添加了可以使其作为栈、队列或双端队列的方法,底层由双向链表实现
HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList原理