Как создать хэш-таблицу на Java?
каков наиболее простой способ создания хэш-таблицы (или ассоциативного массива...) в Java? Мой google-fu привел пару примеров, но есть ли стандартный способ сделать это?
и есть ли способ заполнить таблицу списком пар ключ - > значение без индивидуального вызова метода add на объекте для каждой пары?
7 ответов
Map map = new HashMap();
Hashtable ht = new Hashtable();
оба класса можно найти из java.пакет утиль. Разница между 2 объясняется в следующем jGuru статье.
для настройки данных можно использовать двойные скобки. Вы все еще называете add или put, но это менее уродливо:
private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() {{
put("foo", 1);
put("bar", 256);
put("data", 3);
put("moredata", 27);
put("hello", 32);
put("world", 65536);
}};
также не забывайте, что Map и Hashtable являются общими в Java 5 и выше (как и в любом другом классе в основа коллекции).
Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
Integer one = numbers.get("one");
Assert.assertEquals(1, one);
Что Эдмонд сказал.
Что касается не звонить .добавляйте все время, нет, не идиоматически. Были бы различные хаки (хранение его в массиве, а затем цикл), которые вы могли бы сделать, если бы вы действительно хотели, но я бы не рекомендовал его.
и есть ли способ заполнить таблицу списком пар ключ - > значение без индивидуального вызова метода add на объекте для каждой пары?
одна из проблем с вашим вопросом заключается в том, что вы не упоминаете, в какой форме находятся ваши данные. Если ваш список пар оказался списком карт.Ввод объектов будет довольно простым.
чтобы выбросить это, есть (очень оклеветанный) класс с именем java.утиль.Свойства это расширение хеш-таблицы. Он ожидает только строковые ключи и значения и позволяет загружать и хранить данные с помощью файлов или потоков. Формат файла, который он читает и записывает, выглядит следующим образом:
key1=value1
key2=value2
Я не знаю, если это то, что вы ищете, но есть ситуации, когда это может быть полезно.
важно отметить, что хэш-функция Java менее оптимальна. Если вы хотите меньше столкновений и почти полное устранение повторного хеширования при ~ 50% емкости, я бы использовал алгоритм хеширования Buz Buz Hash
причина слабости алгоритма хэширования Java наиболее очевидна в том, как он хэширует строки.
"a".hash()
дать вам представление ASCII "a"
-97
, Так что "b"
будет 98
. Весь смысл хэширования заключается в назначении произвольного и" как можно более случайное " число.
Если вам нужна быстрая и грязная хэш-таблица, обязательно используйте java.util
. Если вы ищете что-то надежное, более масштабируемое, я бы посмотрел на реализацию вашего собственного.