HashMap面试

  1. HashMap和Hashtable的区别

hashmap和hashtable的开发作者不一样,hashmap的作者是并发大师Doug Lea编写的,hashmap出现在jdk1.1, 而hashtable是一直就有的,hashtable实现了Dictionary类,Dictionary接口已经被弃用,因而hashtable也被标识为过时的,hashmap是继承了abstractmap类,不过他们都实现了cloneable,map.serializable接口,hashtable比hashmap多了elements(),返回所有的value值,还有contains方法,hashtable和hashmap都有containsvalue方法,其中hashtable的底层其实就是调用的contains方法。hashmap可以保存key/value为null的数据,hashtable的key和value都不能为空,在hashmap的get()获取数据为空,可能是value本身保存的为空,也有可能是当前的key不存在返回的数据,所以不能get()来判断键值是否存在,应该使用方法containskey();hashmap的初始化大小和hashtable是一样的都是11,但是扩容的时候hashmap的大小会增加n条,而hashtable的大小是增加n+1,hashmap是线程不安全的, hashtable是线程安全类,hashtable的方法都被用Synchronize关键字修饰,Synchronize使用的是对象锁,所以性能没有hashmap的高,在平时,hashmap满足单线程场景下的高性能使用需求。hashtable不支持null的key,是因为hashtable直接将key进行hashcode运算,而hashmap则是对null设定为特殊的hash值,hashmap在计算hash值的时候进行了位运算,而hashtable是执行的除法运算,HashMap则更加关注hash的计算效率,遍历方式上面,hashtable额外支持Enumeration方式迭代。

猜你喜欢

转载自www.cnblogs.com/java2048/p/12057397.html