У меня есть сопоставление массива int [2] с весами. Итак, [2, 3] -> 5, [4,5] -> 6 и т. Д. Является ли работоспособной стратегией использование HashMap, где я делаю h.put (Arrays.deepHashCode (a), w)? У меня большой объем данных, и я хочу иметь возможность быстро находить весы, заданные координатами x, y. Я вижу ошибки, когда h.get (hashcode), кажется, возвращает мне неожиданные значения позже. Не всегда, но изредка. Возможно, это артефакт того, что [x, y] и [a, b] могут иногда иметь один и тот же deepHashCode()? Я попытаюсь свернуть его до небольшого фрагмента кода, но в настоящее время трудно изолировать эту проблему.Хеширование массива целым числом
EDIT: Я выделил проблему. Выключает Arrays.deepHashCode ([2, 74]) так же, как Arrays.deepHashCode ([3, 43]) [оба возвращают 1097 в мою систему]. Я неправильно подумал, что get() разрешит мне столкновения .. но он не может, поскольку его сопоставление hashcode с значением и ключ массива больше не существует, когда я сделал put().
Да, некоторый код будет очень полезен. Кроме того, что вы подразумеваете под «неожиданными значениями»? Вы, кажется, подразумеваете, что иногда получаете один и тот же хэш-код для двух разных объектов. Это оно? Потому что это не запрещено. – sstan
Я храню тысячи [x, y] кортежей (ключ) для отображения веса (значения) в хеш-таблице. Позже я читаю [x, y], чтобы вернуть вес и его возвращающиеся неожиданные значения (иногда это не то, что я ввел). Вы правы, что мне нужно предоставить более четкий вопрос с кодом. Посмотрите, смогу ли я запустить небольшую программу, чтобы изолировать это. Я полагаю, что [x, y] -> w1 может быть перезаписано [a, b] -> w2, если [x, y] .hashcode и [a, b] .hashcode такие же, но они должны быть редкими. – user3079275
Я согласен с @sstan. Нам нужно увидеть некоторый код, чтобы 1) попытаться понять проблему и 2) попытаться выяснить, почему ваша реализация не работает. –