Hashtable子类
Hashtable类是从JDK1.0的时候提供的,与Vector、Enumeration属于最早的一批动态数组的实现类,后面为了将其保存下来,所以让其多实现了map接口,Hashtable定义结构如下:
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable
Hashtable类的继承结构如下:
范例:Hashtable的使用
import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
Map<String,Integer> hashtable = new Hashtable<>();
hashtable.put("one",1);
hashtable.put("two",2);
hashtable.put("two",20); //同HashMap一样会覆盖之前的key
hashtable.put(null,0);
hashtable.put("zero",null);
System.out.println(hashtable);
}
}
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Object.hashCode()" because "key" is null
at java.base/java.util.Hashtable.put(Hashtable.java:481)
at MapDemo.main(MapDemo.java:14)
我的数据中含有null,会报出空指针异常。
import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
Map<String,Integer> hashtable = new Hashtable<>();
hashtable.put("two",2);
hashtable.put("one",1);
hashtable.put("two",20); //同HashMap一样会覆盖之前的key
hashtable.put("three",3);
System.out.println(hashtable);
}
}
{two=20, one=1, three=3}
可以发现Hashtable中key与value值都不允许为null,否则会出现异常。
面试题:请解释HashMap与Hashtable的区别:
- HashMap中的方法都属于异步操作,非线程安全;
- Hashtable中的方法都属于同步方法(线程安全);
- HashMap允许保存null数据,Hashtable不允许保存null;