HashMap面试题
转自:http://www.mayikt.com/
1、HashMap和HashTable的区别?
<1>、HashTable是线程安全的,不允许key为空,因为put方法上加上了synchronized,在方法体中,有代码判断如果key为空,则抛出异常;
<2>、HashMap线程是不安全的,允许key为空;
2、HashMap的key可以为空,这个key存放数组的那个位置上?
存放在到下标为零的位置,也就是数据的第一个位置上,只允许存放一个key为空的对象;
因为在方法hash(Object key)中,定义如下:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
所以,key为空时,存放在数组的第一个位置上;
3、HashMap是否允许存放自定义对象作为Key?
可以;因为在put(k,v)方法中,key定义了允许任何对象,
在hash(Object key)方法中,也定义了可以可以为任何对象