美文网首页
2020-12-08-Java-复习-59(面试题摘要4)

2020-12-08-Java-复习-59(面试题摘要4)

作者: 冰菓_ | 来源:发表于2020-12-21 07:59 被阅读0次

1.hashmap的长度为什么是2的幂次方

1.数组下标的计算公式是: (N-1) & hash
2.要获取数组下标计算公式: hash%N 如果N(数组的长度)是2的幂次方 则等价于hash/N = (N-1) & hash
3.使用下标的计算公式&效率高
如果一个数是2的幂次方倍,则:

int isPow(n){
    return (n & (n - 1)) == 0;//用来判断是否是2的幂次方
}

进行扩容时:
元素的位置要么是在原位置,要么是在原位置再移动2次幂的位置。对应的就是下方的resize的注释
jdk8:在扩容中只用判断原来的 hash 值与左移动的一位(newtable 的值)按位与操作是 0 或 1 就行,0 的话索引就不变,1 的话索引变成原索引加上扩容前数组

jdk1.7HashMap在多线程下会形成环形链表:

2sleep 和 wait 的区别

两者最主要的区别在于: sleep方法没有释放锁,而wait方法释放了锁。
两者都可以暂停线程的执行。wait通常被用于线程间交互/通信, sleep通常被用于暂停执行。
wait()方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()或者notifyA11()方法。
sleep()方法执行完成后,线程会自动苏醒。或者可以使用wait(longtimeout)超时后线程会自动苏醒。

3.synchronized

相关文章

网友评论

      本文标题:2020-12-08-Java-复习-59(面试题摘要4)

      本文链接:https://www.haomeiwen.com/subject/xmrzwktx.html