CodeGym /Java Blog /Willekeurig /Hoe een woordenboek in Java te maken
John Squirrels
Niveau 41
San Francisco

Hoe een woordenboek in Java te maken

Gepubliceerd in de groep Willekeurig
Als u een woordenboek in een Java-programma moet maken, is de meest logische manier om dit probleem op te lossen het gebruik van de woordenboekgegevensstructuur. Met deze gegevensstructuur kunt u informatie opslaan in de vorm "sleutel - waarde". Java heeft een speciale klasse Dictionary en zijn afstammeling, Hashtable . Ook is er de Map- interface en de HashMap- klasse, die ook "sleutel - waarde"-paren opslaat. Er zijn dus veel manieren om een ​​Java-woordenboek te maken.

Woordenboek gegevensstructuur

De gegevensstructuur van Dictionary slaat dus informatie op als een sleutel-waardecombinatie. Dat wil zeggen, we koppelen aan elke waarde een sleutel (dit kan bijvoorbeeld id zijn) en voeren dit paar in het woordenboek in. Het adresseren van een element van het woordenboek, het verwijderen, zoeken in het woordenboek wordt uitgevoerd door de sleutel. Het lijkt handig om met behulp van een dergelijke datastructuur bijvoorbeeld een telefoonboek te organiseren, waarbij de naam (sleutel) overeenkomt met het telefoonnummer (waarde).

Woordenboekklasse en de extensie ervan

Om te beginnen is java.util.Dictionary <K, V> util.Dictionary een abstracte klasse. Het vertegenwoordigt een sleutel-waarderelatie en werkt vergelijkbaar met een kaart. Gegeven een sleutel kunt u waarden opslaan en indien nodig de waarde terughalen met behulp van de sleutel. Het is dus een lijst met sleutel-waardeparen.

public abstract class Dictionary<K,V> extends Object
Aangezien deze klasse abstract is, zullen we er niet rechtstreeks mee werken. Woordenboek heeft een directe onderliggende klasse Hashtable . Dus voor het maken van een woordenboek in Java kun je Hashtable gebruiken . Deze klasse implementeert een hashtabel, die sleutels toewijst aan waarden en elk niet-null-object kan als sleutel of als waarde worden gebruikt. In Java breidt hiërarchie Hashtable Dictionary uit en implementeert Map . Laten we een voorbeeld geven. We gaan een klassiek woordenboek maken, een telefoonboek, gebaseerd op Hashtable .

Dictionary phoneBook = new Hashtable();
Als we op deze manier schrijven, zouden we voor sommige bewerkingen typecasting moeten toepassen. Bijvoorbeeld voor een sleutelextractie.

System.out.println(((Hashtable) phoneBook).keySet());
Om dit te voorkomen, kunnen we veranderen

Dictionary phoneBook = new Hashtable ();
op de

Hashtable phoneBook = new Hashtable ();
In ons voorbeeld laten we voor de duidelijkheid de eerste optie staan.

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);
       }
   }
De uitvoer is:
{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, Klimop Briggs=1877}

HashMap als woordenboek

HashMap is , in tegenstelling tot Hashtable , geen directe afstammeling van Dictionary . Vanwege de vele functies is het in de meeste gevallen echter beter om een ​​woordenboek te maken met HashMap . De klasse HashMap lijkt qua functionaliteit sterk op Hashtable . Het belangrijkste verschil is dat de methodes van de Hashtable gesynchroniseerd zijn, maar de HashMap niet. Synchronisatie in de hashtabel vermindert de prestaties van code. Bovendien is de HashMap- klasse, in tegenstelling tot Hashtable, maakt het gebruik van null als sleutel (één) en een set null als waarden mogelijk. In ons geval zal het programma er exact hetzelfde uitzien als het bovenstaande voorbeeld. Het enige verschil zit in het type collectie. In de meeste gevallen is dit echter de beste manier om met woordenboeken in Java te werken.

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);
   }

}
Hier is de uitvoer:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null waar onwaar [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Klimop Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION