本文写给正在努力的自己,努力的补基础知识,五道题一篇
ps:我把答案都放在解析下面了
- java8中,下面哪个类用到了解决哈希冲突的开放地址法?
A. LinkedHashSet
B. HashMap
C. ThreadLocal
D. TreeMap
初始想法:我记得ThreadLocal是一个安全线程,在配置SSM的时候,可以用它来确定一个事务的提交
解析:ThreadLocal通过key(ThreadLocal类型)的hashcode来计算数组存储的索引位置。如果i位置已经存储了对象,那么就往后挪一个位置以此类推,知道找到空的位置,再将对象存放,另外,在最后还需要判断一下当前的存储的对象个数是否已经超出了阈值(threshold的值)大小,如果超出了,需要重新扩展并将所有的对象重新计算位置。
ThreadLocal使用的开放地址法——线性探测法:当前哈希槽有其他对象占了,顺着数组找寻下一个,直到找到为止
HashSet中调用的HashMap来存储数据,而HashMap采用的链地址法:当哈希槽中有其他对象时,使用链表的方式连接到那个对象上,变成桶,当桶的数达到一定的时候会变成树。
答案:C
- 程序员计算器中HEX DEC OCT BIN代表什么?
初始想法:对于英语不好的我有点要命
解析及答案:
HEX,Hexadecimal ,十六进制。
DEC,Decimal ,十进制。
OCT,Octal ,八进制。
BIN,Binary ,二进制。
- 在java中,关于HashMap类的描述,一下正确的是?
A. HashMap使用键值对来存储数据
B. HashMap能够保证其中的元素顺序
C. HashMap允许将null用作键
D. HashMap允许将null用作值
初始想法:记得老师说过键值对就像钥匙跟锁,key就是钥匙,value就是锁,通过钥匙找锁,所以一个钥匙对应一把锁,但是值的内容可以一样,键则不可以
解析:
HashMap只允许一个key为null,如果继续放入key为null的键值对,则会覆盖
另外HashMap不按照插入顺序排序,而是按照哈希值来排序,所以是无序
答案:ACD
- 下面那些选项是正确的?
A. >>是算术右移操作符
B. >>是逻辑右移操作符
C. >>>是算术右移操作符
D. >>>是逻辑右移操作符
初始想法:蒙了,都有点忘记算术右移怎么计算了,逻辑右移又是怎么计算的
解析:运算符“>>”执行算术右移,它使用最高位填充移位后左侧的空位。
右移的结果为:每移一位,第一个操作数被2除一次,移动的次数由第二个操作数确定。
逻辑右移或叫无符号右移运算符“>>>“只对位进行操作,没有算术含义,它用0填充左侧的空位。
算术右移不改变原数的符号,而逻辑右移不能保证这点。
移位运算符约简其右侧的操作数,当左侧操作数是int类型时,右侧以32取模;当左侧是long类型时,右侧以64取模。
答案:AD
- 以下代码那句会报编译错误
public static void main(String[] args) {
byte b1 = 1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3 = (b1+b2);//1
b6 = b4 +b5;//2
b8 = (b1+b4);//3
b7 = (b2+b5);//4
System.out.println(b3+b6);
}
初始想法:有点蒙,忘记字节的用法了。
解析:在看这道题之前我们先来回想以下关于final的重要知识点吧
- final关键字可以用于成员变量,本地变量,方法和类
- final成员变量必须在定义它的时候初始化或者在构造器中初始化,否则会报编译错误
- 不能为final修饰的变量再次赋值
- 本地变量必须在定义的时候或者第一次使用的时候赋值
- 在匿名类中所有变量必须是final变量
- final修饰的方法不能被重写
- final修饰的类不能被继承
我们之前的博客中也有讲过如果double类型加上float类型会转换为什么,再来复习一下吧
只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型,如果两个操作数中有一个是float类型的,另一个将会被转换为float类型,并且结果也是float类型,如果两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型,否则(操作数为:byte、short、int 、char),两个数都会被转换成int类型,并且结果也是int类型。
我们了解完final关键字的几个重要知识点和数据类型转换后,来看看题目
语句 1 :(b1 + b2) 被转换为int类型 但是 b3仍为 byte ,所以出错 要么将b3转化为int 要么将(b1 + b2) 强制转换为byte类型。所以语句1错误。
语句 2:b4 、b5被声明final 所以类型是不会转换, 计算结果任然是byte ,所以 语句2正确。
语句 3:(b1 + b4) 结果仍然转换成int 所以语句 3 错误。
语句 4 : (b2 + b5) 结果仍然转换为int , 所以语句4错误。
答案:BCD