java hashmap面试_【Java面试】java hashMap

HashMap 1.7的时候是数组+单链表,1.8 时数组+单链表或者红黑树

单链表和红黑树之间的转化,单链表长度大于等于8转化为红黑树

什么时候线程是不安全的呢?

put 时

jdk1.7存储使用entry数组,jdk8使用node或者treenode数组存储

jdk1.7时采用头部插法,在resize的时候会将原来的链表逆序

jdk1.8采用尾部插入,在resize的时候仍然保持原来的顺序

在hashmap中插入、删除和定位元素操作比较好,但是要遍历元素时,将map转换为treemap进行有序遍历

线程安全问题:

因为线程安全的问题,HashMap比HashTable效率更高,另外,HashTable基本被淘汰,基本没有人在代码中使用hashtable

ConcurrentHashMap1.7时底层使用分断数组,为了线程安全底层有分断锁,1.8时改为数组+单链表或者红黑树-->放弃锁分链机制的,改为synchronized+CAS

相信有很多小伙伴不清楚什么是红黑树,但是说红黑树前不得不说起二叉树

什么是二叉树

左子树上所有的节点的值均小于或等于它的根节点的值

右子树上所有的节点的值均大于或等于它的根节点的值

左右子树也一定分别为二叉树

红黑树

红黑树就是一种平衡的二叉查找树,除了符合二叉查找树的特性之外,还具有:

节点是红色或者黑色

根节点是黑色

每个叶子的节点都是黑色的空节点

每个红色节点的两个子节点都是黑色的

从任意节点到其每个叶子的所有路径都包含相同的黑色节点

当你理解其原理后,关注一波小编不迷路,后续会持续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值