10. Словари
Каждому элементу множества мы можем сопоставить то или иное значение. Например, каждому элементу множества строк можно сопоставить целое число.
Тогда, зная элемент множества, мы можем, например, перебрав все
элементы массива elements
, найти индекс совпадающего элемента и
вернуть связанное с ним целочисленное значение. Значения
можно хранить просто во втором массиве и при увеличении размера массива elements
увеличивать размер второго.
Такие структуры называются словарями. Элементы множества называются ключами, а связанные с ними значения - значениями
В Java
реализованы словари на основе хэшей HashMap
и на основе красно-чёрного
дерева TreeMap
.
Строго говоря, в Java
реализованы словари, а соответствующие множества
наследуют их как словари без ключей.
Задание
Это задание рассчитано на два урока, за него будет выставлено две оценки
Вам требуется на основе класса HashSet
написать класс словаря MyHashMap
на хэшах со строковыми ключами и
целочисленными значениями:
Использовать встроенные коллекции java запрещается. Перед каждой проверкой на равенство строк должна быть проверка хэшей
- Поле
keys
, в нём должны храниться строковые ключи словаря, полеkeyCnt
, хранящее количество сохранённых элементов, а также полеvalues
- массив значений - Конструктор по умолчанию
MyHashMap()
, в нём должен инициализироваться целочисленный массивkeys
десятью нулевыми элементами. Количество элементовelemCnt
должно быть равно . String [] getKeys()
- возвращает копию массиваelements
, но копироваться должны только сохранённые элементы (доelemCnt
)int [] getValues()
- возвращает копию массиваelements
, но копироваться должны только сохранённые элементы (доelemCnt
)boolean put(String key, int value)
, он должен добавлять новый элемент в множество ключей (в конец массива). При добавлении элементов в множество необходимо добавлять новый элемент в позицию с индексом, равным количеству уже добавленных элементов. Если массив уже полностью заполнен, то необходимо создать новый, в два полтора больший, и скопировать в него все элементы исходного массива. После этого необходимо добавить новый элемент. При добавлении Метод должен увеличивать количество добавленных элементов множество на . Возвращаетtrue
, если был добавлен ключ или изменено значение,false
- в остальных случаях.boolean remove(String v)
- удаляет ключ, переданных в аргументах и соответствующее ему значение, возвращаетtrue
, если получилось удалить иfalse
, если такого элемента не былоboolean containsKey(String v)
- возвращаетtrue
, если в множестве есть хотя бы один элемент, равный переданному в аргументах иfalse
, если нетint get(String v)
- возвращает значение, если в словаре присутствует соответствующий ключ. Если такого ключа нет, то следует вернутьInteger.MAX_VALUE
boolean putAll(MyHashMap myHashMap)
- добавляет в словарь все пары ключ-значение из словаря, переданного в параметрах. Возвращаетсяtrue
, если был добавлен хотя бы один элемент иfalse
- если нет.
Все поля и методы должны иметь модификатор public