HashMap和Hashtable的区别
相同点:HashMap和Hashtable都是java的集合类,都可以用来存放java对象
区 别:
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个实现。
二.同步性:Hashtable是同步的。这个类中的一些方法保证了Hashtable中的对象是线程安全的。而HashMap则是异步的,因此HashMap中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合,那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。
三.值:HashMap可以让你将空值作为一个表的条目的key或value,但是Hashtable是不能放入空值的(null)。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.util.HashMap;
import java.util.Hashtable;
public class Test {
public static void main(String[] args) {
HashMap hm = new HashMap();
hm.put(null, null);// 可以放入null键和值
System.out.println(hm.get(null));// 运行时不会出现错误
Hashtable ht = new Hashtable();
ht.put(null, null);// 可以放入null键和null值
ht.put("abc", null);// 可以放入null键和null值
ht.put(null, "aaa");// 可以放入null键和null值
// 下面的3种得到值的方式都会出现空指针异常。也就是说只可以放不可以获得。
System.out.println(ht.get(null));// 运行时会出现错误
System.out.println(ht.get("abc"));// 运行时会出现错误
System.out.println(ht.get(null));// 运行时会出现错误
}
}