Ако трябва да създадете речник в програма на 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}
GO TO FULL VERSION