Hvis du trenger å lage en ordbok i et Java-program, er den mest logiske måten å løse dette problemet på å bruke ordbokens datastruktur. Denne datastrukturen lar deg lagre informasjon i formen "nøkkel - verdi". Java har en spesiell Ordbok- klasse i tillegg til dens etterkommer, Hashtable . Det er også kartgrensesnittet og HashMap- klassen, som også lagrer "nøkkel-verdi"-par. Så det er mange måter å lage en Java-ordbok på.
Ordbok datastruktur
Så ordbokens datastruktur lagrer informasjon som en nøkkel-verdi kombinasjon. Det vil si at vi til enhver verdi assosierer en nøkkel (det kan for eksempel være id) og legger inn dette paret i ordboken. Adressering av et element i ordboken, sletting, søk i ordboken utføres med tasten. Det virker praktisk å organisere ved hjelp av en slik datastruktur, for eksempel en telefonbok, der navnet (nøkkelen) tilsvarer telefonnummeret (verdien).Ordbokklassen og dens utvidelse
Til å begynne med er java.util.Dictionary <K, V> util.Dictionary en abstrakt klasse. Det representerer en nøkkel-verdi-relasjon og fungerer som et kart. Gitt en nøkkel kan du lagre verdier og ved behov kan du hente verdien tilbake ved å bruke nøkkelen. Dermed er det en liste over nøkkelverdi-par.
public abstract class Dictionary<K,V> extends Object
Siden denne klassen er abstrakt, vil vi ikke jobbe med den direkte. Ordbok har en direkte barneklasse Hashtable . Så for å lage en ordbok i Java kan du bruke Hashtable . Denne klassen implementerer en hash-tabell, som tilordner nøkler til verdier, og ethvert objekt som ikke er null kan brukes som en nøkkel eller som en verdi. I Java-hierarki utvider Hashtable Dictionary og implementerer Map . La oss gi et eksempel. Vi skal lage en klassisk ordbok, en telefonbok, basert på Hashtable .
Dictionary phoneBook = new Hashtable();
Hvis vi skriver på denne måten, bør vi bruke typestøping for noen operasjoner. For eksempel for et nøkkeluttak.
System.out.println(((Hashtable) phoneBook).keySet());
For å unngå dette kan vi endre
Dictionary phoneBook = new Hashtable ();
på
Hashtable phoneBook = new Hashtable ();
I vårt eksempel vil vi for klarhets skyld forlate det første alternativet.
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);
}
}
Utgangen er:
{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 , i motsetning til Hashtable , er ikke en direkte etterkommer av Dictionary . Men på grunn av mange funksjoner er det i de fleste tilfeller bedre å lage en ordbok ved å bruke HashMap . HashMap - klassen er veldig lik Hashtable i funksjonalitet . Hovedforskjellen er at metodene til Hashtable er synkronisert, men HashMap er det ikke. Synkronisering i hashtabellen reduserer ytelsen til kode. I tillegg er HashMap -klassen, i motsetning til Hashtable, tillater bruk av null som en nøkkel (én) og et sett med null som verdier. I vårt tilfelle vil programmet se nøyaktig det samme ut som eksemplet ovenfor. Den eneste forskjellen er i typen av samlingen. Dette er imidlertid den foretrukne måten å jobbe med ordbøker på i Java i de fleste tilfeller.
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);
}
}
Her er utgangen:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null sant usant [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 18817, 4101] Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
GO TO FULL VERSION