Сведения о вопросе

Life

13:20, 15th August, 2020

Теги

java   hash   hashmap    

Как создать таблицу hash в Java?

Просмотров: 458   Ответов: 8

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

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



  Сведения об ответе

$DOLLAR

18:28, 25th August, 2020

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

Оба класса можно найти в пакете java.util. Разница между 2 объясняется в следующей записи jGuru FAQ .


  Сведения об ответе

ITSME

04:42, 4th August, 2020

Для настройки данных можно использовать двойные скобки. Вы все еще называете 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);
 }};


  Сведения об ответе

lourence

18:11, 8th August, 2020

Также не забывайте, что и 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);


  Сведения об ответе

padenie

14:44, 11th August, 2020

import java.util.HashMap;

Map map = new HashMap();


  Сведения об ответе

lesha

09:28, 20th August, 2020

То, что сказал Эдмунд .

Что касается того, чтобы не звонить .add все время, нет, не идиоматически. Там были бы различные хаки (хранение его в массиве, а затем цикл), которые вы могли бы сделать, если бы действительно захотели, но я бы не рекомендовал это делать.


  Сведения об ответе

KOMP

01:59, 8th August, 2020

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

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

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

key1=value1
key2=value2

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


  Сведения об ответе

crush

01:34, 15th August, 2020

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

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

"a".hash() дает вам представление ASCII о "a" - 97, так что "b" будет 98 . Весь смысл хэширования состоит в том, чтобы присвоить произвольное и "as random as possible" число.

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


  Сведения об ответе

KOMP

01:22, 22nd August, 2020

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

положите значения ...

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

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

if (optionalMax.isPresent())
 System.out.println(optionalMax.get());


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться