當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java HashMap和HashTable的區別用法及代碼示例


HashMapHashtable 將鍵值對存儲在哈希表中。使用 Hashtable 或 HashMap 時,我們指定一個用作鍵的對象以及要鏈接到該鍵的值。然後對鍵進行哈希處理,得到的哈希碼用作表中存儲值的索引。現在讓我們通過一個例子來討論。

哈希圖與哈希表

  • HashMap 不同步。它不是線程安全的,如果沒有正確的同步代碼,就不能在多個線程之間共享,而 Hashtable 是同步的。它是線程安全的,可以與多個線程共享。
  • HashMap 允許一個空鍵和多個空值,而 Hashtable 不允許任何空鍵或值。
  • 如果不需要線程同步,則 HashMap 通常優於 HashTable。

Difference Between Hashmap and Hashtable

S. 編號 哈希圖 哈希表
1. 沒有方法被同步。 每個方法都是同步的。
2. 多個線程可以同時操作,因此 hashmap 的對象不是線程安全的。 同一時刻隻允許一個線程操作 Hashtable 的對象。因此它是線程安全的。
3. 線程不需要等待,因此性能相對較高。 它增加了線程的等待時間,因此性能較低。
4. 鍵和值都允許為 Null。 鍵和值都不允許為 Null。否則,我們將得到一個 NullPointerException 。
5. 它是在1.2版本中引入的。 它是在1.0版本中引入的。
6. 它是非遺產。 這是一個遺產。

現在你一定想知道為什麽 HashTable 不允許 null 而 HashMap 允許

答案很簡單。為了成功地在 HashTable 中存儲和檢索對象,用作鍵的對象必須實現 hashCode 方法和 equals 方法。由於 null 不是對象,因此它無法實現這些方法。 HashMap是Hashtable的高級版本和改進。 HashMap是後來創建的。

例子:

Java


// Java program to demonstrate
// HashMap and HashTable
import java.util.*;
import java.lang.*;
import java.io.*;
// Name of the class has to be "Main" 
// only if the class is public
class Ideone
{
    public static void main(String args[])
    {
        //----------hashtable -------------------------
        Hashtable<Integer,String> ht=new Hashtable<Integer,String>();
        ht.put(101," ajay");
        ht.put(101,"Vijay");
        ht.put(102,"Ravi");
        ht.put(103,"Rahul");
        System.out.println("-------------Hash table--------------");
        for (Map.Entry m:ht.entrySet()) {
            System.out.println(m.getKey()+" "+m.getValue());
        }
        //----------------hashmap--------------------------------
        HashMap<Integer,String> hm=new HashMap<Integer,String>();
        hm.put(100,"Amit");
        hm.put(104,"Amit");  
        hm.put(101,"Vijay");
        hm.put(102,"Rahul");
        System.out.println("-----------Hash map-----------");
        for (Map.Entry m:hm.entrySet()) {
            System.out.println(m.getKey()+" "+m.getValue());
        }
    }
}
輸出
-------------Hash table--------------
103 Rahul
102 Ravi
101 Vijay
-----------Hash map-----------
100 Amit
101 Vijay
102 Rahul
104 Amit

本文由 Aditya Goel 編譯。



相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Differences between HashMap and HashTable in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。