Java面试题:HashMap和HashTable的区别


HashMap和HashTable的区别是面试时面试官经常问的问题,在回答的时候可以选择重点做回答,区别主要有下面几点:
key和value的取值范围不同
HashMap和HashTable都是基于哈希表来实现键值映射的工具类,底层都是哈希表结构。
HashMap允许键为null,值为null,对于HashMap如果使用get方法返回null,并不能表明HashMap不存在这个key,有可能是键对应的值为null。
HashTable则不允许null键和null值。
线程安全
HashMap是非synchronized的,而HashTable是synchronized的。synchronized是Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。这说明HashTable是线程安全的,而HashMap线程不安全。
效率与同步
HashMap是不同步的、效率高的,HashTable是同步的、效率低的。
虽然HashMap不是线程安全的,但是它的效率会比HashTable要好很多。这样设计是合理的。在我们的日常使用当中,大部分时间是单线程操作的。HashMap把这部分操作解放出来了。
当需要多线程操作的时候可以使用线程安全的ConcurrentHashMap。ConcurrentHashMap虽然也是线程安全的,但是它的效率比HashTable要高很多。
选择与使用
如果不需要线程安全,那么使用HashMap,如果需要线程安全,那么使用ConcurrentHashMap,ConcurrentHashMap不但是线程安全的,效率也比HashTable要高,HashTable已经几乎被淘汰了。


作者:仰望天空丶路人,发布于:2019/08/15
原文:https://www.cnblogs.com/dogday/p/11347300.html