CodeGym /Java-blogg /Tilfeldig /Hvordan lage en ordbok i Java
John Squirrels
Nivå
San Francisco

Hvordan lage en ordbok i Java

Publisert i gruppen
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 ();

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}
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION