Java 中 HashMap 和 HashTable 的區別是什麼
HashMap 和 HashTable 都是 Java 集合框架中最重要的類之一。HashMap 和 HashTable 都以鍵值對的形式儲存資料,在儲存資料時,使用雜湊函式對鍵進行雜湊處理,生成的雜湊碼用作表中儲存值的索引。但是,這兩個類之間仍然存在許多差異,我們將在下面討論。
以下是 HashMap 和 HashTable 之間的重要區別。
| 序號 | 關鍵點 | HashMap | HashTable |
|---|---|---|---|
| 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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP