Java(持续更新)

2022/2/13 17:44:50

本文主要是介绍Java(持续更新),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.Java中sleep方法和wait方法的区别?
1)sleep是线程中的方法,wait是Object中的方法
2)sleep会释放锁,wait不会释放锁
3)sleep方法不依赖于同步器synchronized,但是wait需要依赖synchronized关键字
4)sleep不需要被唤醒,但是wait需要

2深入理解HashMap与Hash算法
1)HashMap的数据结构
JDK1.7之前底层是数组和链表
JDK1.8以后是数组和链表或红黑树,因为当数据太多的时候,用链表查询效率比较低,所以引入红黑树
2)什么时候链表转化为红黑树?
链表的长度大于8,且数组长度大于等于64(默认是16,经过两次扩容),否则会先数组扩容
3)put和get方法
先根据key值计算出Hash值–>根据Hash值算出数组的下标–》
key:如果key为空,返回0,key.hashCode()和key.hashCode向右无符号位16位做一个异或运算
下标:得到的hash值与n-1进行与运算,得到数组的下标,n是数组的长度
如果n是2的次方的条件下:(n-1)&hash的效果和hash%n的效果一样,且效率更高
4)为什么HashMap要把hashCode做一个运算改进?
为了让算出来的数组下标会更加分散

3.HashMap的扩容机制是怎样的?
1)什么条件下扩容?
HashMap最主要的数据结构是数组,一般情况下,是放在数组上的,如果数组已经有元素,就会发生Hsah冲突,那么就会使用链表或者红黑树的结构进行存储。
HashMap默认的大小是16,阈值为0.75,每次扩容2被
2)扩容会发生什么?
扩容后原有的元素也需要重新散列,因为数组变长,元素在数组上的位置也可能发生改变‘

4.final、finalize和finally的不同之处?
final是一个修饰符,可以修饰变量,方法和类,修饰变量会变成常量,修饰方法不能重写,修饰类不能继承
finally是一个关键字,与try、catch一起用于异常处理,finally块一定会被执行,无论try是否发生了异常
finalize方法是对象被回收之前调用的方法,给对象自己一个最后复活自己的机会,但是什么时候调用finalize没有保证



这篇关于Java(持续更新)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程