更新時(shí)間:2022-04-02 11:34:45 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2470次
如果需要在Java程序中創(chuàng)建字典,解決這個(gè)問題最合乎邏輯的方法就是使用字典數(shù)據(jù)結(jié)構(gòu)。這種數(shù)據(jù)結(jié)構(gòu)允許您以“鍵-值”的形式存儲(chǔ)信息。Java 有一個(gè)特殊的Dictionary類以及它的后代Hashtable。還有Map接口和HashMap類,它也存儲(chǔ)“鍵-值”對。所以有很多方法可以創(chuàng)建 Java 字典。
因此,Dictionary 數(shù)據(jù)結(jié)構(gòu)將信息存儲(chǔ)為鍵值組合。也就是說,我們將任何值與一個(gè)鍵關(guān)聯(lián)(例如,它可以是 id)并將這對輸入到字典中。對字典的元素進(jìn)行尋址、刪除、在字典中的搜索都是由鍵執(zhí)行的。使用這樣的數(shù)據(jù)結(jié)構(gòu)組織起來似乎很方便,例如,電話簿,其中名稱(鍵)對應(yīng)于電話號(hào)碼(值)。
首先, java.util.Dictionary util.Dictionary是一個(gè)抽象類。它表示鍵值關(guān)系,其工作方式類似于地圖。給定一個(gè)鍵,您可以存儲(chǔ)值,并在需要時(shí)使用其鍵檢索值。因此,它是一個(gè)鍵值對列表。
public abstract class Dictionary<K,V> extends Object
由于這個(gè)類是抽象的,我們不會(huì)直接使用它。Dictionary有一個(gè)直接的子類Hashtable。因此,要在 Java 中創(chuàng)建字典,您可以使用Hashtable。該類實(shí)現(xiàn)了一個(gè)哈希表,它將鍵映射到值,任何非空對象都可以用作鍵或值。在 Java 層次結(jié)構(gòu)中Hashtable擴(kuò)展了Dictionary并實(shí)現(xiàn)了Map。讓我們舉個(gè)例子。我們將基于Hashtable創(chuàng)建一個(gè)經(jīng)典字典、電話簿。
Dictionary phoneBook = new Hashtable();
如果我們這樣寫,我們應(yīng)該對一些操作應(yīng)用類型轉(zhuǎn)換。例如,對于密鑰提取。
System.out.println(((Hashtable) phoneBook).keySet());
為了避免這種情況,我們可以改變
Dictionary phoneBook = new Hashtable ();
在
Hashtable phoneBook = new Hashtable ();
在我們的示例中,為清楚起見,我們將保留第一個(gè)選項(xiàng)。
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
true
[Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs]
[1298, 2178, 2001, 1877]
4
{Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877}
HashMap與Hashtable不同,它不是Dictionary的直接后代。但是,由于許多特性,在大多數(shù)情況下,最好使用HashMap創(chuàng)建字典。HashMap類在功能上與Hashtable非常相似。主要區(qū)別在于Hashtable的方法是同步的,而HashMap不是。Hashtable中的同步會(huì)降低代碼的性能。另外,HashMap類,不像Hashtable, 允許使用 null 作為鍵(一個(gè))和一組 null 作為值。在我們的例子中,程序看起來與上面的示例完全相同。唯一的區(qū)別在于集合的類型。但是,在大多數(shù)情況下,這是在 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
true
false
[Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker]
[1298, 1877, 2001, 2178]
4
{Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
相關(guān)閱讀