CodeGym /Blog Java /Aleatoriu /Cum se creează un dicționar în Java
John Squirrels
Nivel
San Francisco

Cum se creează un dicționar în Java

Publicat în grup
Dacă trebuie să creați un dicționar într-un program Java, cel mai logic mod de a rezolva această problemă este să utilizați structura de date a dicționarului. Această structură de date vă permite să stocați informații sub forma „cheie - valoare”. Java are o clasă specială de Dicționar , precum și descendentul său, Hashtable . De asemenea, există interfața Map și clasa HashMap , care stochează și perechi „cheie - valoare”. Deci, există multe modalități de a crea un dicționar Java.

Dicţionar data structure

Deci, structura de date Dicționar stochează informații ca o combinație cheie-valoare. Adică cu orice valoare asociem o cheie (poate fi, de exemplu, id) și introducem această pereche în dicționar. Adresarea unui element al dicționarului, ștergerea, căutarea în dicționar se realizează cu ajutorul tastei. Pare convenabil să se organizeze folosind o astfel de structură de date, de exemplu, o agendă telefonică, unde numele (cheia) corespunde numărului de telefon (valoarea).

Clasa de dicționar și extensia sa

Pentru început, java.util.Dictionary <K, V> util.Dictionary este o clasă abstractă. Reprezintă o relație cheie-valoare și funcționează similar cu o hartă. Având o cheie, puteți stoca valori și, atunci când este necesar, puteți recupera valoarea înapoi folosind cheia acesteia. Astfel, este o listă de perechi cheie-valoare.

public abstract class Dictionary<K,V> extends Object
Deoarece această clasă este abstractă, nu vom lucra direct cu ea. Dicționarul are o clasă directă de copii Hashtable . Deci, pentru a crea un dicționar în Java, puteți folosi Hashtable . Această clasă implementează un tabel hash, care mapează cheile la valori și orice obiect non-null poate fi folosit ca cheie sau ca valoare. În ierarhia Java, Hashtable extinde Dicționarul și implementează Map . Să dăm un exemplu. Vom crea un dicționar clasic, o carte de telefon, bazată pe Hashtable .

Dictionary phoneBook = new Hashtable();
Dacă scriem astfel, ar trebui să aplicăm tip casting pentru unele operații. De exemplu, pentru extragerea cheii.

System.out.println(((Hashtable) phoneBook).keySet());
Pentru a evita acest lucru, ne putem schimba

Dictionary phoneBook = new Hashtable ();
pe

Hashtable phoneBook = new Hashtable ();
În exemplul nostru, pentru claritate, vom lăsa prima opțiune.

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);
       }
   }
Ieșirea este:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null adevărat [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001] Walker 4 {Johnny Walker, 4 =2178, Ricky McBright=2001, Ivy Briggs=1877}

HashMap ca dicționar

HashMap , spre deosebire de Hashtable , nu este un descendent direct al Dictionary . Cu toate acestea, datorită multor caracteristici, în majoritatea cazurilor este mai bine să creați un dicționar folosind HashMap . Clasa HashMap este foarte asemănătoare ca funcționalitate cu Hashtable . Principala diferență este că metodele Hashtable-ului sunt sincronizate, dar HashMap -ul nu. Sincronizarea în Hashtable scade performanța codului. În plus, clasa HashMap , spre deosebire de Hashtable, permite utilizarea null ca cheie (una) și a unui set de null ca valori. În cazul nostru, programul va arăta exact la fel ca în exemplul de mai sus. Singura diferență este în tipul colecției. Cu toate acestea, aceasta este modalitatea preferată de a lucra cu dicționare în Java în majoritatea cazurilor.

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

}
Iată rezultatul:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null adevărat fals [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 4201], 4 208 Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION