HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList原理

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原理

上一篇:gitlab 修改用户最多创建10个项目限制


下一篇:QPushButton使用学习