CodeGym /Java Blog /Toto sisi /如何在 Java 中創建字典
John Squirrels
等級 41
San Francisco

如何在 Java 中創建字典

在 Toto sisi 群組發布
如果需要在 Java 程序中創建字典,解決這個問題最合乎邏輯的方法是使用字典數據結構。這種數據結構允許您以“鍵-值”的形式存儲信息。Java 有一個特殊的Dictionary類及其後代Hashtable。還有Map接口和HashMap類,它們也存儲“鍵-值”對。所以創建Java字典的方法有很多種。

字典數據結構

因此,字典數據結構將信息存儲為鍵值組合。也就是說,對於任何值,我們都會關聯一個鍵(例如,它可以是 id)並將這對輸入到字典中。字典中某個元素的尋址、刪除、查找都是通過key來完成的。使用這樣的數據結構來組織似乎很方便,例如,電話簿,其中名稱(鍵)對應於電話號碼(值)。

字典類及其擴展

首先,java.util.Dictionary <K, V> util.Dictionary是一個抽像類。它表示鍵值關係,其工作方式類似於地圖。給定一個鍵,您可以存儲值,並在需要時可以使用其鍵檢索回值。因此,它是一個鍵值對列表。

public abstract class Dictionary<K,V> extends Object
因為這個類是抽象的,我們不會直接使用它。Dictionary有一個直接的子類Hashtable。因此,要在 Java 中創建字典,您可以使用Hashtable。此類實現了一個哈希表,它將鍵映射到值,任何非空對像都可以用作鍵或值。在 Java 層次結構中,Hashtable擴展了Dictionary並實現了Map。讓我們舉個例子。我們將基於Hashtable創建一個經典的字典,電話簿。

Dictionary phoneBook = new Hashtable();
如果我們這樣寫,我們應該對某些操作進行類型轉換。例如,用於密鑰提取。

System.out.println(((Hashtable) phoneBook).keySet());
為了避免這種情況,我們可以改變

Dictionary phoneBook = new Hashtable ();

Hashtable phoneBook = new Hashtable ();
在我們的示例中,為了清楚起見,我們將保留第一個選項。

import java.util.Dictionary;
import java.util.Hashtable;

public class DictionaryDemo {

       public static void main(String[] args) {

           Dictionary phoneBook = new Hashtable();

           // put() method
           phoneBook.put("Johnny Walker", "2178");
           phoneBook.put("Andrew Arnold", "1298");
           phoneBook.put("Ivy Briggs", "1877");
           phoneBook.put("Ricky McBright", "2001");

           //print out Hashtable out
           System.out.println(phoneBook);

           //let's get the value using the key
           System.out.println(phoneBook.get("Ivy Briggs"));
           //there's no such key in out Hashtable
           System.out.println(phoneBook.get("Sol Frank"));

           //Is there a record with the "Johnny Walker" key?
           System.out.println(((Hashtable) phoneBook).containsKey("Johnny Walker"));
           //all keys of the Hashtable
           System.out.println(((Hashtable) phoneBook).keySet());
           //values from Hashtable
           System.out.println(((Hashtable) phoneBook).values());

           //the quantity of records
           System.out.println(phoneBook.size());
           //removing one record
           phoneBook.remove("Andrew Arnold");
           System.out.println(phoneBook);
       }
   }
輸出是:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null tr​​ue [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] 4 {Johnny Walker =2178,Ricky McBright=2001,Ivy Briggs=1877}

HashMap 作為字典

HashMapHashtable不同,它不是Dictionary的直接後代。但是,由於許多特性,在大多數情況下,最好使用HashMap創建字典。HashMap類在功能上與Hashtable非常相似。主要區別在於Hashtable的方法是同步的,而HashMap不是。哈希表中的同步會降低代碼的性能。另外,HashMap類,不像Hashtable, 允許使用 null 作為鍵(一個)和一組 null 作為值。在我們的例子中,程序看起來與上面的例子完全一樣。唯一的區別在於集合的類型。但是,在大多數情況下,這是在 Java 中使用字典的首選方式。

import java.util.HashMap;
import java.util.Map;

public class DictionaryDemo2 {

   public static void main(String[] args) {

       Map<String, String> phoneBook = new HashMap<String,String>();
      
       phoneBook.put("Johnny Walker", "2178");
       phoneBook.put("Andrew Arnold", "1298");
       phoneBook.put("Ivy Briggs", "1877");
       phoneBook.put("Ricky McBright", "2001");
      
       System.out.println(phoneBook);
      
       System.out.println(phoneBook.get("Johnny Walker"));
       System.out.println(phoneBook.get("Ivy Briggs"));
       System.out.println(phoneBook.get("Unknown Friend"));
      
       System.out.println(phoneBook.containsKey("Johnny Walker"));
       System.out.println(phoneBook.containsKey("Unknown Friend"));

       System.out.println(phoneBook.keySet());
       System.out.println(phoneBook.values());

       System.out.println(phoneBook.size());

       phoneBook.remove("Andrew Arnold");

       System.out.println(phoneBook);
   }

}
這是輸出:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null tr​​ue false [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Ivy Briggs=1877,Ricky McBright=2001,Johnny Walker=2178}
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION