Skip to content

Commit 321a9ed

Browse files
authored
verily I say to u, Hereafter ye'll see heaven open
And he saith unto him, Verily, verily, I say unto you, Hereafter ye shall see heaven open, and the angels of God ascending and descending upon the Son of man. (John 1:51)
1 parent dc0ae01 commit 321a9ed

1 file changed

Lines changed: 94 additions & 0 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
2+
//And he saith unto him, Verily, verily, I say unto you, Hereafter ye shall see heaven open, and the angels of God ascending and descending upon the Son of man. (John 1:51)
3+
4+
package com.javarush.task.task36.task3610;
5+
6+
import java.util.Map;
7+
8+
/*
9+
MyMultiMap
10+
*/
11+
12+
public class Solution {
13+
public static void main(String[] args) {
14+
Map<Integer, Integer> map = new MyMultiMap<>(3);
15+
for (int i = 0; i < 7; i++) {
16+
map.put(i, i);
17+
}
18+
map.put(5, 56);
19+
map.put(5, 57);
20+
System.out.println(map.put(5, 58)); //expected: 57
21+
22+
System.out.println(map); //expected: {0=0, 1=1, 2=2, 3=3, 4=4, 5=56, 57, 58, 6=6}
23+
System.out.println(map.size()); //expected: size = 9
24+
25+
System.out.println(map.remove(5)); //expected: 56
26+
System.out.println(map); //expected: {0=0, 1=1, 2=2, 3=3, 4=4, 5=57, 58, 6=6}
27+
System.out.println(map.size()); //expected: size = 8
28+
29+
System.out.println(map.keySet()); //expected: [0, 1, 2, 3, 4, 5, 6]
30+
System.out.println(map.values()); //expected: [0, 1, 2, 3, 4, 57, 58, 6]
31+
32+
System.out.println(map.containsKey(5)); //expected: true
33+
System.out.println(map.containsValue(57)); //expected: true
34+
System.out.println(map.containsValue(7)); //expected: false
35+
}
36+
}
37+
38+
/*
39+
MyMultiMap
40+
41+
Амиго, иногда существующих в Java коллекций недостаточно. Тогда можно либо взять стороннюю реализацию, например, Google Guava или Apache Commons, либо реализовать свою структуру данных. Сегодня у тебя есть уникальная возможность испытать свои силы и написать часть своей структуры данных.
42+
43+
44+
45+
Наша структура данных называется MyMultiMap. Она параметризована дженериками, наследуется от HashMap, и реализует интерфейсы Cloneable, Serializable. Особенность нашей мапы будет в том, что конструктор принимает число типа int repeatCount - это количество, сколько значений может хранится по одному ключу.
46+
47+
48+
49+
Реализуй методы:
50+
51+
1) int size() - должен возвращать количество значений в нашей коллекции.
52+
53+
2) V put(K key, V value) - должен добавить элемент value по ключу key. Если в мапе такой ключ уже есть, и количество значений по этому ключу меньше, чем repeatCount - то добавь элемент value в конец листа в объекте map. Если по такому ключу количество значений равняется repeatCount - то удали из листа в объекте map элемент с индексом ноль, и добавь в конец листа value. Метод должен возвращать значение последнего добавленного элемента по ключу key (но не значение, которое мы сейчас добавляем). Если по ключу key значений еще нет - верни null.
54+
55+
3) V remove(Object key) - должен удалить элемент по ключу key. Если по этому ключу хранится несколько элементов - должен удаляться элемент из листа с индексом ноль. Если по какому-то ключу хранится лист размером ноль элементов - удали такую пару ключ : значение. Метод должен возвращать элемент, который ты удалил. Если в мапе нет ключа key - верни null.
56+
57+
4) Set<K> keySet() - должен вернуть сет всех ключей, которые есть в мапе map.
58+
59+
5) Collection<V> values() - должен вернуть ArrayList<V> всех значений. Порядок значений в листе не имеет значения.
60+
61+
6) boolean containsKey(Object key) - должен вернуть true, если в мапе присутствует ключ key, иначе вернуть false.
62+
63+
7) boolean containsValue(Object value) - должен вернуть true, если в мапе присутствует значение value, иначе вернуть false.
64+
65+
66+
67+
Смотри пример поведения в методе main().
68+
69+
Метод main() не принимает участия в тестировании.
70+
71+
72+
73+
74+
75+
Требования:
76+
77+
1. Класс MyMultiMap должен наследоваться от HashMap и реализовать интерфейсы Cloneable, Serializable.
78+
79+
2. В классе MyMultiMap должно присутствовать приватное поле HashMap> map.
80+
81+
3. Необходимо реализовать метод int size() согласно условию.
82+
83+
4. Необходимо реализовать метод boolean containsKey(Object key) согласно условию.
84+
85+
5. Необходимо реализовать метод boolean containsValue(Object value) согласно условию.
86+
87+
6. Необходимо реализовать метод V put(K key, V value) согласно условию.
88+
89+
7. Необходимо реализовать метод V remove(Object key) согласно условию.
90+
91+
8. Необходимо реализовать метод Set keySet() согласно условию.
92+
93+
9. Необходимо реализовать метод Collection values() согласно условию.
94+
*/

0 commit comments

Comments
 (0)