Вопрос

Каков самый простой способ создания хеш-таблицы (или ассоциативного массива...) в Java?Мой гугл-фу нашел пару примеров, но есть ли стандартный способ сделать это?

И есть ли способ заполнить таблицу списком пар ключ->значение без отдельного вызова метода добавления объекта для каждой пары?

Это было полезно?

Решение

Map map = new HashMap();
Hashtable ht = new Hashtable();

Оба класса можно найти в пакете java.util.Разница между ними объясняется следующим: Запись часто задаваемых вопросов 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);
import java.util.HashMap;

Map map = new HashMap();

Что Эдмунд сказал.

Насчет того, чтобы не вызывать .add постоянно, нет, не идиоматически.Если бы вы действительно этого хотели, вы могли бы использовать различные хаки (сохранение их в массиве и последующее зацикливание), но я бы не рекомендовал их.

И есть ли способ заполнить таблицу списком пар ключ->значение без отдельного вызова метода добавления объекта для каждой пары?

Одна из проблем с вашим вопросом заключается в том, что вы изначально не упоминаете, в какой форме находятся ваши данные.Если бы ваш список пар оказался списком объектов Map.Entry, это было бы довольно просто.

Чтобы выбросить это из головы, есть (очень оклеветанный) класс с именем java.util.Properties, который является расширением Hashtable.Он ожидает только строковые ключи и значения и позволяет загружать и хранить данные с помощью файлов или потоков.Формат файла, который он читает и записывает, следующий:

key1=value1
key2=value2

Я не знаю, то ли это вы ищете, но бывают ситуации, когда это может быть полезно.

Важно отметить, что хеш-функция Java не оптимальна.Если вы хотите меньше коллизий и почти полное исключение повторного хеширования при мощности ~ 50%, я бы использовал алгоритм Buz Hash. Буз Хэш

Причина слабости алгоритма хеширования Java наиболее очевидна в том, как он хэширует строки.

"a".hash() дать вам ASCII-представление "a" - 97, так "b" было бы 98.Весь смысл хеширования заключается в присвоении произвольного и «насколько возможно случайного» числа.

Если вам нужна быстрая и грязная хеш-таблица, обязательно используйте java.util.Если вы ищете что-то надежное и более масштабируемое, я бы рассмотрел возможность реализации вашего собственного.

Hashtable<Object, Double> hashTable = new Hashtable<>();

поставить ценности ...

получить максимум

Optional<Double> optionalMax = hashTable.values().stream().max(Comparator.naturalOrder());

if (optionalMax.isPresent())
 System.out.println(optionalMax.get());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top