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