Что, если есть конфликт хеширования ключей в ArrayMap или SparseArray? - PullRequest
3 голосов
/ 04 февраля 2020

Я прочитал много блогов для карты массива и разреженного массива, где каждый, где я получаю, что

ArrayMap содержит два маленьких массива вместо одного в HashMap. Первый массив (Ha sh -Array) содержит указанные ключи ha sh в отсортированном порядке. Второй массив (Key Value Array) хранит ключи и значения объектов в соответствии с первым массивом. Для справки ниже приведена ссылка https://android.jlelse.eu/app-optimization-with-arraymap-sparsearray-in-android-c0b7de22541a

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

1 Ответ

1 голос
/ 04 февраля 2020

В отличие от hashMap в ArrayMap, когда происходит столкновение ha sh, вместо добавления пары ключ-значение в связанный список для данной позиции сегмента, для следующего элемента он просто помещает значение в следующую доступную позицию во втором массиве. И для поиска, , когда происходит столкновение ha sh, он проходит по второму массиву, пока не найдет нужные значения .

Здесь это описано в предоставленной do c:

Когда мы выбираем элемент, в массиве Ha sh выполняется двоичный поиск, чтобы найти соответствующий ha sh индекс, а затем непосредственно возвращается пара ключ-значение из второго массива. (Массив значений ключей). Если ключ во втором массиве (массив значений ключей) не совпадает, то для устранения коллизии выполняется линейный обход второго массива (массив значений ключей).

...