Сергей Водаков, a почему бы мне не топить за котлин? Джаву я знаю, но последнее время считаю её устаревшей и неудобной. Нормальные андроид проекты переписываются на котлин.
foonfyrick, нужно знать, как оно устроено, чтобы понимать, как с ним работать. Например, если ключ - это твой класс, то нужно правильно и консистентно переопределить equals и hashCode. Также нужно не заучить, какая сложность вставки в хэштаблицу, а уметь прикинуть на ходу. Если ты понимаешь, что внутри, то работаешь с этим не как с магическим чёрным ящиком, а вполне осознанно. Например, есть IdentityHashMap, она вообще-то нарушает контракт Map, но иногда бывает полезна. А есть SortedMap(TreeMap), у неё внутри rb-tree, сложности операций другие, зато есть полезные свойства, типа того, что ключи отсортированы. Но почему и как они отсортированы, лучше знать, а не просто полагаться на слово Sorted. A есть LinkedHashMap, она тратит дополнительную память на поддержание связного списка для фиксации порядка итерации по ключам. Новые свойства опять. Имхо, просто всё это заучивать бессмысленно, а если ты понял идею, то можешь по ней сделать выводы.
Писать свою реализацию обычно бессмысленно, в каких-то очень редких случаях, наверное нужно. Обычно стандартные библиотека языка содержит словарь в том или ином виде. Но на собеседованиях я, например, иногда спрашиваю. На этой задаче мне удобно смотреть, как человек пишет код.