Ha egy Java programban szótárt kell létrehoznia, a probléma leglogikusabb megoldása a szótár adatszerkezetének használata. Ez az adatstruktúra lehetővé teszi az információk tárolását "kulcs - érték" formában. A Java-nak van egy speciális Dictionary osztálya, valamint ennek leszármazottja, a Hashtable . Itt van még a Map felület és a HashMap osztály, amely szintén tárolja a „kulcs - érték” párokat. Tehát sokféleképpen hozhat létre Java szótárt.
Szótári adatstruktúra
Tehát a szótár adatstruktúra kulcs-érték kombinációként tárolja az információkat. Vagyis bármely értékhez társítunk egy kulcsot (lehet például id), és beírjuk ezt a párost a szótárba. A szótár elemének megcímzése, törlése, keresés a szótárban a kulcs által történik. Kényelmesnek tűnik ilyen adatszerkezettel rendszerezni, például telefonkönyvet, ahol a név (kulcs) megfelel a telefonszámnak (értéknek).Szótárosztály és kiterjesztése
Először is, a java.util.Dictionary <K, V> util.Dictionary egy absztrakt osztály. Kulcs-érték relációt képvisel, és a térképhez hasonlóan működik. Adott egy kulcs, értékeket tárolhat, és szükség esetén a kulcs segítségével visszakeresheti az értéket. Így ez egy kulcs-érték pár lista.public abstract class Dictionary<K,V> extends Object
Mivel ez az osztály absztrakt, nem fogunk vele közvetlenül dolgozni. A szótárnak van egy közvetlen gyermekosztálya Hashtable . Tehát szótár létrehozásához Java nyelven használhatja a Hashtablet . Ez az osztály egy hash táblát valósít meg, amely leképezi a kulcsokat értékekre, és bármely nem nulla objektum használható kulcsként vagy értékként. A Java hierarchiában a Hashtable kiterjeszti a szótárat és megvalósítja a Map alkalmazást . Mondjunk egy példát. Klasszikus szótárt, telefonkönyvet fogunk készíteni a Hashtable alapján .
Dictionary phoneBook = new Hashtable();
Ha így írunk, akkor néhány műveletnél típusöntést kell alkalmazni. Például egy kulcskivonáshoz.
System.out.println(((Hashtable) phoneBook).keySet());
Ennek elkerülése érdekében változtathatunk
Dictionary phoneBook = new Hashtable ();
a
Hashtable phoneBook = new Hashtable ();
Példánkban az egyértelműség kedvéért hagyjuk az első lehetőséget.
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);
}
}
A kimenet a következő:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null igaz [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] =2178, Ricky McBright=2001, Ivy Briggs=1877}
HashMap mint szótár
A HashMap a Hashtable-tól eltérően nem a Dictionary közvetlen leszármazottja . Számos funkció miatt azonban a legtöbb esetben jobb szótárt létrehozni a HashMap használatával . A HashMap osztály funkcionalitásában nagyon hasonló a Hashtable-hoz . A fő különbség az, hogy a Hashtable metódusai szinkronizáltak, de a HashMap nem. A hashtable szinkronizálása csökkenti a kód teljesítményét. Ezenkívül a HashMap osztály, ellentétben a Hashtable-val, lehetővé teszi a null kulcsként (egy) és a null készlet értékként történő használatát. Esetünkben a program pontosan ugyanúgy fog kinézni, mint a fenti példában. Az egyetlen különbség a gyűjtemény típusában van. A legtöbb esetben azonban ez az előnyben részesített módja a Java szótárak használatának.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);
}
}
Íme a kimenet:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null igaz hamis [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 4, {207 8] Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}