兩者的區別主要集中以下幾個方面: 1.key是否允許為空 HashMap允許key為null,Hashtable不允許key為null。 2.value是否允許為空 HashMap允許value為空,Hashtbale不允許value為null。 3.線程是否安全 HashMap線程不安全,Hash ...
兩者的區別主要集中以下幾個方面:
1.key是否允許為空
HashMap允許key為null,Hashtable不允許key為null。
2.value是否允許為空
HashMap允許value為空,Hashtbale不允許value為null。
3.線程是否安全
HashMap線程不安全,Hashtable線程安全。
4.Hashtable部分源碼:
//使用了同步機制,線程安全 public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) {//value不允許為null throw new NullPointerException(); } // Makes sure the key is not already in the hashtable. Entry<?,?> tab[] = table; int hash = key.hashCode();//key不能為null int index = (hash & 0x7FFFFFFF) % tab.length; @SuppressWarnings("unchecked") Entry<K,V> entry = (Entry<K,V>)tab[index]; for(; entry != null ; entry = entry.next) { if ((entry.hash == hash) && entry.key.equals(key)) { V old = entry.value; entry.value = value; return old; } } addEntry(hash, key, value, index); return null; }