HashMap
Особенности HashMap:
Когда лучше использовать HashMap в Android:
Как работает под капотом:
HashMap использует хеш-таблицу для хранения данных. Когда вы добавляете элемент в HashMap, он вычисляет хеш-код ключа и использует его для определения индекса внутреннего массива, где будет храниться значение. Если несколько ключей имеют один и тот же хеш-код, они хранятся в связанном списке (или в более эффективной структуре данных в более новых версиях Java) для разрешения коллизий.
Сходство и отличие от других видов коллекций:
При добавлении элемента в HashMap, используется метод hashCode()
ключа, чтобы вычислить его хеш-код. Хеш-код — это целочисленное значение, которое служит индексом внутреннего массива HashMap. Затем происходит определение индекса в массиве путем взятия остатка от деления хеш-кода на размер массива.
val map = HashMap<String, Int>()
map["apple"] = 5
map["banana"] = 10
map["orange"] = 7
Коллизия возникает, когда два или более ключа имеют одинаковый хеш-код. В HashMap коллизии обрабатываются с помощью цепочек. Если два ключа имеют одинаковый хеш-код, они помещаются в один и тот же индекс массива, и их значения хранятся в связанном списке (LinkedList) или другой структуре данных.
Когда происходит поиск элемента по ключу, HashMap сначала вычисляет хеш-код ключа и определяет индекс массива. Затем он просматривает связанный список (или другую структуру данных) в этом индексе, чтобы найти элемент с нужным ключом.
val map = HashMap<String, Int>()
map["apple"] = 5
map["apricot"] = 7 // Коллизия с "apple"
map["banana"] = 10
map["orange"] = 7 // Коллизия с "apricot"
println(map["apple"]) // Выведет: 5
println(map["apricot"]) // Выведет: 7
println(map["orange"]) // Выведет: 7