如果需要在 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 true [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] 4 {Johnny Walker =2178,Ricky McBright=2001,Ivy Briggs=1877}
HashMap 作为字典
HashMap与Hashtable不同,它不是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 true false [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Ivy Briggs=1877,Ricky McBright=2001,Johnny Walker=2178}
GO TO FULL VERSION