Skip to content

Comments

Added LinkedList and HashMap custom classes#1

Open
frolovGeorgy wants to merge 2 commits intoiaulitin:mainfrom
frolovGeorgy:main
Open

Added LinkedList and HashMap custom classes#1
frolovGeorgy wants to merge 2 commits intoiaulitin:mainfrom
frolovGeorgy:main

Conversation

@frolovGeorgy
Copy link

No description provided.

}

// метод для добавления узла с ключом
public void addMap(T key, E element) {
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В целом, можно бы было внутри HashMap использовать обычный LinkedList, и не заморачиваться с необходимостью впихнуть в ноду еще и ключ, и сопутствующие методы.

А то, что ты добавил эти методы в этот класс, не очень хорошо.
Пользователь может работать со списком безо всяких ключей и внезапно наткнуться на эти методы и недоумевать.
Правильнее бы было создать класс-наследник, и в него утащить все, что связано со специфическим для мапы функционалом.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

К ноде (и ее ключу) я бы это замечание тоже отнес, но смотри сам.

array[bucket].remove(result);
if (array[bucket].size() == 0) {
array[bucket] = null;
}
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А для чего потом зануляешь опустевший массив? Если для экономии памяти - не уверен, что стоит этим заниматься - там памяти мизер, а ты теперь вынужден всегда беспокоиться - есть у тебя список в бакете или нет. Если не допускать ситуацию наличия пустого бакета, жить будет лучше, жить будет веселей.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я это делал намеренно. Мне показалось, что так удобнее и быстрее проверять, есть ли элементы в корзине. Если корзина пустая, то соответсвующей ячейке присваевается null.
Все таки лучше оставлять в корзинах head и tail?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я бы оставлял.

Во-первых, фактор сложности кода. Меньше действий - проще код.
Во-вторых, производительность. Да, памяти будет потреблять чуть больше, зато каждая вставка в "пустой" бакет не будет приводить к созданию нового списка и тд. Особенно будет больно, если интенсивно вставлять элементы в мапу и удалять.

import java.util.List;

public class GarriksHashMap<K, V> implements HashMapInterface<K, V> {
private final int MINIMAL_LEN_CAUSING_REPLACEMENT = 13;
Copy link
Owner

@iaulitin iaulitin Dec 11, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Эти константы могут быть статическими.
Обычно именно static final константы пишут в UPPER_SNAKE_CASE

@@ -0,0 +1,58 @@
import java.util.Iterator;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

unused import

@@ -0,0 +1,47 @@
| Метод LinkedList | Время работы, мс |
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

По-хорошему, после внесения изменений, надо эти замеры обновить. Ты ведь и пооптимальнее что-то переписал.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants