Java 中 HashMap 和 HashTable 的區別是什麼


HashMap 和 HashTable 都是 Java 集合框架中最重要的類之一。HashMap 和 HashTable 都以鍵值對的形式儲存資料,在儲存資料時,使用雜湊函式對鍵進行雜湊處理,生成的雜湊碼用作表中儲存值的索引。但是,這兩個類之間仍然存在許多差異,我們將在下面討論。

以下是 HashMap 和 HashTable 之間的重要區別。

序號關鍵點HashMapHashTable
1簡介HashMap 是 HashTable 的高階版本,作為 JDK 1.2 中的新類引入。另一方面,HashTable 是遺留類,在 HashMap 之前引入。
2內部實現這兩個類的內部實現在某種程度上是相同的,但在 HashMap 的情況下,允許一個空鍵和多個空值。HashTable 在內部以不允許任何空鍵或任何空值的方式實現。
3同步HashMap 中未實現同步,並且不是執行緒安全的,因此在沒有適當的同步程式碼的情況下不能在多個執行緒之間共享。另一方面,HashTable 是同步的並且是執行緒安全的,因此可以與多個執行緒共享。
4遍歷元素HashMap 提供迭代器來迭代其儲存的值。另一方面,除了迭代器之外,HashTable 還提供列舉器來遍歷其儲存的值。
5索引效能由於沒有同步,HashMap 比 HashTable 更快,並且在不需要同步時是首選。HashTable 中的同步使其比 HashMap 慢,但也避免了編寫額外的程式碼來獲得同步。
6繼承HashMap 繼承 AbstractMap 類。另一方面,HashTable 繼承 Dictionary 類。

HashMap 與 HashTable 示例

JavaTester.java

import java.util.*;
import java.lang.*;
import java.io.*;
public class JavaTester{
   public static void main(String args[]){
      Hashtable ht=new Hashtable();
      ht.put(101,"John");
      ht.put(101,"Jhony");
      ht.put(102,"Smith");
      ht.put(103,"Andy");
      System.out.println("-------------Hash table--------------");
      Set<Integer> keySet = ht.keySet();
      for (Integer key:keySet) {
         System.out.println(key + " "+ht.get(key));
      }
      HashMap hm=new HashMap();
      hm.put(100,"John");
      hm.put(104,"John"); // hash map allows duplicate values
      hm.put(101,"Smith");
      hm.put(102,"Andy");
      System.out.println("-----------Hash map-----------");
      Set<Integer> keySet1 = ht.keySet();
      for (Integer key:keySet) {
         System.out.println(key + " "+hm.get(key));
      }
   }
}

輸出

-------------Hash table--------------
103 Andy
102 Smith
101 Jhony
-----------Hash map-----------
100 John
101 Smith
102 Andy
104 John

更新於: 2019-09-18

780 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.