CodeGym/Blog Java/Random-PL/Jak stworzyć słownik w Javie
Autor
Volodymyr Portianko
Java Engineer at Playtika

Jak stworzyć słownik w Javie

Opublikowano w grupie Random-PL
Jeśli musisz utworzyć słownik w programie Java, najbardziej logicznym sposobem rozwiązania tego problemu jest użycie słownikowej struktury danych. Taka struktura danych umożliwia przechowywanie informacji w postaci „klucz – wartość”. Java ma specjalną klasę Dictionary oraz jej następcę, Hashtable . Istnieje również interfejs Map i klasa HashMap , która również przechowuje pary „klucz - wartość”. Istnieje więc wiele sposobów tworzenia słownika Java.

Słownikowa struktura danych

Tak więc struktura danych Słownika przechowuje informacje jako kombinację klucz-wartość. Czyli z dowolną wartością kojarzymy klucz (może to być np. id) i taką parę wpisujemy do słownika. Adresowanie elementu słownika, usuwanie, wyszukiwanie w słowniku odbywa się za pomocą klawisza. Wygodne wydaje się organizowanie za pomocą takiej struktury danych, na przykład książki telefonicznej, gdzie nazwa (klucz) odpowiada numerowi (wartości) telefonu.

Klasa słownika i jej rozszerzenie

Zacznijmy od tego, że java.util.Dictionary <K, V> util.Dictionary jest klasą abstrakcyjną. Reprezentuje relację klucz-wartość i działa podobnie do mapy. Biorąc pod uwagę klucz, możesz przechowywać wartości, aw razie potrzeby możesz odzyskać wartość za pomocą jego klucza. Jest to zatem lista par klucz-wartość.
public abstract class Dictionary<K,V> extends Object
Ponieważ ta klasa jest abstrakcyjna, nie będziemy z nią bezpośrednio pracować. Słownik ma bezpośrednią klasę potomną Hashtable . Więc do tworzenia słownika w Javie możesz użyć Hashtable . Ta klasa implementuje tablicę skrótów, która odwzorowuje klucze na wartości, a dowolny obiekt inny niż null może być używany jako klucz lub jako wartość. W hierarchii Java Hashtable rozszerza Dictionary i implementuje Map . Podajmy przykład. Stworzymy klasyczny słownik, książkę telefoniczną, opartą na Hashtable .
Dictionary phoneBook = new Hashtable();
Pisząc w ten sposób, powinniśmy zastosować rzutowanie typów dla niektórych operacji. Na przykład do ekstrakcji klucza.
System.out.println(((Hashtable) phoneBook).keySet());
Aby tego uniknąć, możemy się zmienić
Dictionary phoneBook = new Hashtable ();
na
Hashtable phoneBook = new Hashtable ();
W naszym przykładzie dla jasności zostawimy pierwszą opcję.
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);
       }
   }
Dane wyjściowe to:
{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, Ivy Briggs=1877}

HashMap jako słownik

HashMap , w przeciwieństwie do Hashtable , nie jest bezpośrednim potomkiem Dictionary . Jednak ze względu na wiele funkcji, w większości przypadków lepiej jest stworzyć słownik za pomocą HashMap . Klasa HashMap jest bardzo podobna pod względem funkcjonalności do Hashtable . Główna różnica polega na tym, że metody Hashtable zsynchronizowane, ale HashMap nie. Synchronizacja w Hashtable zmniejsza wydajność kodu. Ponadto klasa HashMap , w przeciwieństwie do Hashtable, umożliwia użycie wartości null jako klucza (jeden) i zestawu wartości null jako wartości. W naszym przypadku program będzie wyglądał dokładnie tak samo jak w powyższym przykładzie. Jedyna różnica polega na rodzaju kolekcji. Jednak w większości przypadków jest to preferowany sposób pracy ze słownikami w Javie.
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);
   }

}
Oto dane wyjściowe:
{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, 2001, 2178] 4 {Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
Komentarze
  • Popularne
  • Najnowsze
  • Najstarsze
Musisz się zalogować, aby dodać komentarz
Ta strona nie ma jeszcze żadnych komentarzy