Added LinkedList and HashMap custom classes#1
Added LinkedList and HashMap custom classes#1frolovGeorgy wants to merge 2 commits intoiaulitin:mainfrom
Conversation
src/GarriksLinkedList.java
Outdated
| } | ||
|
|
||
| // метод для добавления узла с ключом | ||
| public void addMap(T key, E element) { |
There was a problem hiding this comment.
В целом, можно бы было внутри HashMap использовать обычный LinkedList, и не заморачиваться с необходимостью впихнуть в ноду еще и ключ, и сопутствующие методы.
А то, что ты добавил эти методы в этот класс, не очень хорошо.
Пользователь может работать со списком безо всяких ключей и внезапно наткнуться на эти методы и недоумевать.
Правильнее бы было создать класс-наследник, и в него утащить все, что связано со специфическим для мапы функционалом.
There was a problem hiding this comment.
К ноде (и ее ключу) я бы это замечание тоже отнес, но смотри сам.
| array[bucket].remove(result); | ||
| if (array[bucket].size() == 0) { | ||
| array[bucket] = null; | ||
| } |
There was a problem hiding this comment.
А для чего потом зануляешь опустевший массив? Если для экономии памяти - не уверен, что стоит этим заниматься - там памяти мизер, а ты теперь вынужден всегда беспокоиться - есть у тебя список в бакете или нет. Если не допускать ситуацию наличия пустого бакета, жить будет лучше, жить будет веселей.
There was a problem hiding this comment.
Я это делал намеренно. Мне показалось, что так удобнее и быстрее проверять, есть ли элементы в корзине. Если корзина пустая, то соответсвующей ячейке присваевается null.
Все таки лучше оставлять в корзинах head и tail?
There was a problem hiding this comment.
Я бы оставлял.
Во-первых, фактор сложности кода. Меньше действий - проще код.
Во-вторых, производительность. Да, памяти будет потреблять чуть больше, зато каждая вставка в "пустой" бакет не будет приводить к созданию нового списка и тд. Особенно будет больно, если интенсивно вставлять элементы в мапу и удалять.
| import java.util.List; | ||
|
|
||
| public class GarriksHashMap<K, V> implements HashMapInterface<K, V> { | ||
| private final int MINIMAL_LEN_CAUSING_REPLACEMENT = 13; |
There was a problem hiding this comment.
Эти константы могут быть статическими.
Обычно именно static final константы пишут в UPPER_SNAKE_CASE
| @@ -0,0 +1,58 @@ | |||
| import java.util.Iterator; | |||
| @@ -0,0 +1,47 @@ | |||
| | Метод LinkedList | Время работы, мс | | |||
There was a problem hiding this comment.
По-хорошему, после внесения изменений, надо эти замеры обновить. Ты ведь и пооптимальнее что-то переписал.
No description provided.