Om du behöver skapa en ordbok i ett Java-program är det mest logiska sättet att lösa detta problem att använda ordbokens datastruktur. Denna datastruktur låter dig lagra information i formen "nyckel - värde". Java har en speciell Dictionary- klass samt dess ättling, Hashtable . Det finns också kartgränssnittet och klassen HashMap , som också lagrar "nyckel - värde"-par. Så det finns många sätt att skapa en Java-ordbok.
Ordbok datastruktur
Så, ordbokens datastruktur lagrar information som en nyckel-värdekombination. Det vill säga, med vilket värde som helst associerar vi en nyckel (det kan till exempel vara id) och skriver in detta par i ordboken. Adressering av ett element i ordboken, radering, sökning i ordboken utförs med knappen. Det verkar bekvämt att organisera med sådan datastruktur, till exempel en telefonbok, där namnet (nyckeln) motsvarar telefonnumret (värdet).Ordboksklass och dess förlängning
Till att börja med är java.util.Dictionary <K, V> util.Dictionary en abstrakt klass. Den representerar en nyckel-värde relation och fungerar på samma sätt som en karta. Med en nyckel kan du lagra värden och vid behov kan du hämta värdet tillbaka med hjälp av dess nyckel. Det är alltså en lista över nyckel-värdepar.
public abstract class Dictionary<K,V> extends Object
Eftersom den här klassen är abstrakt kommer vi inte att arbeta med den direkt. Dictionary har en direkt underordnad klass Hashtable . Så för att skapa en ordbok i Java kan du använda Hashtable . Den här klassen implementerar en hashtabell, som mappar nycklar till värden och alla icke-nullobjekt kan användas som en nyckel eller som ett värde. I Java-hierarkin utökar Hashtable Dictionary och implementerar Map . Låt oss ge ett exempel. Vi ska skapa en klassisk ordbok, en telefonbok, baserad på Hashtable .
Dictionary phoneBook = new Hashtable();
Om vi skriver så här bör vi tillämpa typgjutning för vissa operationer. Till exempel för ett nyckelutdrag.
System.out.println(((Hashtable) phoneBook).keySet());
För att undvika detta kan vi ändra oss
Dictionary phoneBook = new Hashtable ();
på
Hashtable phoneBook = new Hashtable ();
I vårt exempel lämnar vi det första alternativet för tydlighetens skull.
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);
}
}
Utgången är:
{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, 4Johnny Walker] =2178, Ricky McBright=2001, Ivy Briggs=1877}
HashMap som en ordbok
HashMap är, till skillnad från Hashtable , inte en direkt ättling till Dictionary . Men på grund av många funktioner är det i de flesta fall bättre att skapa en ordbok med HashMap . HashMap - klassen är mycket lik Hashtable i funktionalitet . Den största skillnaden är att metoderna för Hashtable är synkroniserade, men HashMap är det inte. Synkronisering i hashtabellen minskar kodens prestanda. Dessutom HashMap -klassen, till skillnad från Hashtable, tillåter användning av null som nyckel (ett) och en uppsättning null som värden. I vårt fall kommer programmet att se exakt likadant ut som exemplet ovan. Den enda skillnaden är i typen av samling. Detta är dock det föredragna sättet att arbeta med ordböcker i Java i de flesta fall.
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);
}
}
Här är utgången:
{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, 41081], 40 Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
GO TO FULL VERSION