поиск хеш-функции для массива длинных целых

1

Я ищу хэш-функцию для целочисленного массива, содержащего около 17 целых чисел. В HashMap содержится около 1000 элементов, и я хочу, чтобы вычисления были как можно быстрее.

Меня сейчас путают многие хеш-функции, и я замечаю, что большинство из них предназначены для строк с разными символами. Итак, есть ли хеш-функция, предназначенная для строк только с номерами и быстро запускаемая?

Спасибо за ваше терпение!

  • 0
    Вы имеете в виду hashmap внутри hashmap? или hashmap, который принимает строку как ключ и целое число как значение?
  • 0
    Извините за неоднозначное описание. На самом деле я просто хочу запросить объект по ключу в hashmap. И hashmap принимает массив целых чисел в качестве ключа.
Показать ещё 2 комментария
Теги:
hash
hashcode
hash-function

2 ответа

1

Вы не указали никаких требований (кроме скорости вычисления), но посмотрите на java.util.Arrays # hashCode. Он также должен быть быстрым, просто повторяя один раз над массивом и объединяя элементы в вычислении int.

Возвращает хэш-код на основе содержимого указанного массива. Для любых двух непустых int-массивов a и b, таких как Arrays.equals(a, b), также имеет место Arrays.hashCode(a) == Arrays.hashCode(b).

Значение, возвращаемое этим методом, является тем же значением, которое было бы получено путем вызова метода hashCode в списке, содержащем последовательность экземпляров Integer, представляющих элементы a в том же порядке. Если a равно null, этот метод возвращает 0.


И hashmap принимает массив целого в качестве ключа.

Вообще-то, нет!

Вы можете технически использовать int[] в качестве ключа в HashMap в Java (вы можете использовать любой тип Object), но это не сработает, поскольку массивы не определяют полезный метод hashCode (или полезный метод equals), Таким образом, ключ будет использовать идентификатор объекта. Два массива с идентичным содержимым будут считаться отличными друг от друга.

Вы можете использовать List<Integer>, который реализует hashCode и equals. Но имейте в виду, что вы не должны мутировать список после установки его в качестве ключа. Это сломает хэш-таблицу.

  • 0
    Спасибо ~ Я посмотрел на них, и я просто хочу узнать больше о вычислении хэш-кода. По сути, я хочу как можно меньше коллизий хеш-кода. Так как есть менее 1000 предметов, я думаю, что это почти не должно вызывать коллизий. И я также хочу, чтобы вычисления были быстрыми, поскольку они будут реализованы в течение длительного времени. Еще раз спасибо за ваши усилия ~
  • 0
    Вычисление хеш-кода определяется по адресу docs.oracle.com/javase/6/docs/api/java/util/… . Довольно просто, просто сложения и умножения с 31.
Показать ещё 3 комментария
0

Функции hashmap можно найти в https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

Создание хэш-карты очень просто.

HashMap<Object, Integer> map = new HashMap<Object, Integer>();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню