CodeGym/Java блог/Случаен/Как да създадете речник в Java
John Squirrels
Ниво
San Francisco

Как да създадете речник в Java

Публикувано в групата
Ако трябва да създадете речник в програма на Java, най-логичният начин за решаване на този проблем е да използвате структурата на речниковите данни. Тази структура на данните ви позволява да съхранявате информация във формата "ключ - стойност". Java има специален клас Dictionary , Howто и неговия наследник, Hashtable . Също така има интерфейс Map и клас HashMap , който също съхранява двойки "ключ - стойност". Така че има много начини за създаване на речник на Java.

Структура на речниковите данни

И така, структурата от данни на речника съхранява информация като комбинация ключ-стойност. Тоест, с всяка стойност свързваме ключ (може да бъде например id) и въвеждаме тази двойка в речника. Адресирането на елемент от речника, изтриването, търсенето в речника се извършва от ключа. Изглежда удобно да се организира с помощта на такава структура от данни, например телефонен указател, където името (ключ) съответства на телефонния номер (стойност).

Клас речник и неговото разширение

Като начало java.util.Dictionary <K, V> util.Dictionary е абстрактен клас. Той представлява връзка ключ-стойност и работи подобно на карта. При даден ключ можете да съхранявате стойности и когато е необходимо, можете да извлечете стойността обратно, като използвате неговия ключ. По този начин това е списък от двойка ключ-стойност.
public abstract class Dictionary<K,V> extends Object
Тъй като този клас е абстрактен, няма да работим директно с него. Речникът има директен дъщерен клас Hashtable . Така че за създаване на речник в Java можете да използвате Hashtable . Този клас имплементира хеш-table, която съпоставя ключове със стойности и всеки ненулев обект може да се използва като ключ or като стойност. В йерархията на Java Hashtable разширява речника и внедрява Map . Да дадем пример. Ще създадем класически речник, телефонен указател, базиран на Hashtable .
Dictionary phoneBook = new Hashtable();
Ако пишем по този начин, трябва да приложим кастинг на типове за някои операции. Например за извличане на ключ.
System.out.println(((Hashtable) phoneBook).keySet());
За да избегнем това, можем да променим
Dictionary phoneBook = new Hashtable ();
на
Hashtable phoneBook = new Hashtable ();
В нашия пример, за по-голяма яснота, ще оставим първата опция.
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);
       }
   }
Резултатът е:
{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, Рики Макбрайт=2001, Айви Бригс=1877}

HashMap като речник

HashMap , за разлика от Hashtable , не е пряк наследник на Dictionary . Въпреки това, поради много функции, в повечето случаи е по-добре да създадете речник с помощта на HashMap . Класът HashMap е много подобен по функционалност на Hashtable . Основната разлика е, че методите на Hashtable са синхронизирани, но HashMap не са. Синхронизирането в Hashtable намалява производителността на codeа. В допълнение, класът HashMap , за разлика от Hashtable, позволява използването на null като ключ (едно) и набор от null като стойности. В нашия случай програмата ще изглежда точно Howто в горния пример. Единствената разлика е във вида на колекцията. Това обаче е предпочитаният начин за работа с речници в Java в повечето случаи.
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);
   }

}
Ето резултата:
{Андрю Арнолд=1298, Айви Бригс=1877, Рики Макбрайт=2001, Джони Уокър=2178} 2178 1877 null true false [Андрю Арнолд, Айви Бригс, Рики Макбрайт, Джони Уокър] [1298, 1877, 2001, 2178] 4 { Айви Бригс=1877, Рики Макбрайт=2001, Джони Уокър=2178}
Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари