CodeGym /Java-Blog /Random-DE /So erstellen Sie ein Wörterbuch in Java
Autor
Volodymyr Portianko
Java Engineer at Playtika

So erstellen Sie ein Wörterbuch in Java

Veröffentlicht in der Gruppe Random-DE
Wenn Sie in einem Java-Programm ein Wörterbuch erstellen müssen, besteht die logischste Lösung dieses Problems in der Verwendung der Wörterbuchdatenstruktur. Mit dieser Datenstruktur können Sie Informationen in der Form „Schlüssel – Wert“ speichern. Java verfügt über eine spezielle Dictionary- Klasse sowie deren Nachkomme Hashtable . Außerdem gibt es die Map- Schnittstelle und die HashMap- Klasse, die ebenfalls „Schlüssel-Wert“-Paare speichert. Es gibt also viele Möglichkeiten, ein Java-Wörterbuch zu erstellen.

Wörterbuchdatenstruktur

Die Datenstruktur des Wörterbuchs speichert also Informationen als Schlüssel-Wert-Kombination. Das heißt, wir verknüpfen mit jedem Wert einen Schlüssel (es kann beispielsweise eine ID sein) und geben dieses Paar in das Wörterbuch ein. Das Adressieren eines Elements des Wörterbuchs, das Löschen und Suchen im Wörterbuch erfolgt über die Taste. Es erscheint zweckmäßig, mithilfe einer solchen Datenstruktur beispielsweise ein Telefonbuch zu organisieren, bei dem der Name (Schlüssel) der Telefonnummer (Wert) entspricht.

Wörterbuchklasse und ihre Erweiterung

Zunächst einmal ist java.util.Dictionary <K, V> util.Dictionary eine abstrakte Klasse. Es stellt eine Schlüssel-Wert-Beziehung dar und funktioniert ähnlich wie eine Karte. Mit einem Schlüssel können Sie Werte speichern und bei Bedarf mit dem Schlüssel wieder abrufen. Es handelt sich also um eine Liste von Schlüssel-Wert-Paaren.

public abstract class Dictionary<K,V> extends Object
Da diese Klasse abstrakt ist, werden wir nicht direkt damit arbeiten. Dictionary hat eine direkte untergeordnete Klasse Hashtable . Zum Erstellen eines Wörterbuchs in Java können Sie also Hashtable verwenden . Diese Klasse implementiert eine Hash-Tabelle, die Schlüssel Werten zuordnet und jedes Nicht-Null-Objekt als Schlüssel oder als Wert verwendet werden kann. In der Java-Hierarchie erweitert Hashtable Dictionary und implementiert Map . Geben wir ein Beispiel. Wir werden ein klassisches Wörterbuch, ein Telefonbuch, basierend auf Hashtable erstellen .

Dictionary phoneBook = new Hashtable();
Wenn wir auf diese Weise schreiben, sollten wir für einige Operationen eine Typumwandlung anwenden. Zum Beispiel für eine Schlüsselextraktion.

System.out.println(((Hashtable) phoneBook).keySet());
Um dies zu vermeiden, können wir uns ändern

Dictionary phoneBook = new Hashtable ();
auf der

Hashtable phoneBook = new Hashtable ();
In unserem Beispiel belassen wir der Übersichtlichkeit halber die erste Option.

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);
       }
   }
Die Ausgabe ist:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null wahr [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] 4 {Johnny Walker =2178, Ricky McBright=2001, Ivy Briggs=1877}

HashMap als Wörterbuch

HashMap ist im Gegensatz zu Hashtable kein direkter Nachkomme von Dictionary . Aufgrund der vielen Funktionen ist es jedoch in den meisten Fällen besser, ein Wörterbuch mit HashMap zu erstellen . Die HashMap- Klasse ist in ihrer Funktionalität der Hashtable sehr ähnlich . Der Hauptunterschied besteht darin, dass die Methoden der Hashtable synchronisiert sind, die der HashMap jedoch nicht. Die Synchronisierung in der Hashtabelle verringert die Leistung des Codes. Darüber hinaus ist die HashMap- Klasse im Gegensatz zu Hashtableermöglicht die Verwendung von null als Schlüssel (eins) und einer Reihe von null als Werten. In unserem Fall sieht das Programm genauso aus wie im obigen Beispiel. Der einzige Unterschied besteht in der Art der Sammlung. Dies ist jedoch in den meisten Fällen die bevorzugte Art, mit Wörterbüchern in Java zu arbeiten.

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 ist die Ausgabe:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null wahr falsch [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION