Мне нужно выполнить следующее:
Требования:
В пакете coll.MapSet реализовать новый класс MapSet, который расширяет AbstractMap> и реализует Iterable гдеK представляет общий ключ, а V представляет общее значение:
public class MapSet<K, V> extends AbstractMap<K, HashSet<V>> implements Iterable<V>
Цель этого класса - сохранить словарь ключей K для объектов HashSet.Методы
Требуются только три метода, но вы можете добавить дополнительные вспомогательные методы.
addValue
Реализуйте addValue так, чтобы при вызове этого метода добавлялсяданное значение для HashSet, связанного с данным ключом.Этот метод должен иметь следующую подпись:
public void addValue(K, V)
итератор
Реализуйте итератор так, чтобы обходились только значения V.Сначала значения пересекаются в порядке убывания размера объектов HashSet, связанных с ключами, а затем в порядке итератора для HashSet.
entrySet
Этот метод должен бытьреализовано и переопределено из AbstractMap.Он должен просто вернуть Set> из MapSet.Выход
Пример вывода показан ниже.Для заданной основной:
public static void main(String[] args) {
MapSet<String, Integer> map = new MapSet<>();
map.addValue("B", 4);
map.addValue("A", 0);
map.addValue("A", 1);
map.addValue("B", 3);
map.addValue("A", 2);
for (Integer value : map) {
System.out.println(value);
}
}
Ожидаемый результат:
0
1
2
3
4
Сначала в ключе «A» проверяются значения, потому что с ним связано наибольшее количество элементов.Значения внутри «A» затем пересекаются в порядке итератора связанного с ним HashSet.Далее, обход повторяется для «B».
Я сделал ниже, но я действительно не уверен, с чего начать с итератора.
package coll.MapSet;
import java.util.*;
import java.lang.Iterable;
public class MapSet<K, V> extends AbstractMap<K, HashSet<V>> implements Iterable<V> {
private Map<K, HashSet<V>> contents = new HashMap<>();
public void addValue(K key, V value) {
if(contents.containsKey(key)){
contents.get(key).add(value);
}
else{
HashSet<V> set = new HashSet<>();
set.add(value);
contents.put(key, set);
}
}
@Override
public Iterator<V> iterator(){
return new Iterator<>() {
private HashMap<K, Integer> sizeMap = new HashMap<>();
private List<V> orderedValueList = new ArrayList<>();
//I am really unsure what to do with the iterator to get the required output. Any help would be appreciated.
@Override
public boolean hasNext() {
return null;
}
@Override
public V next() {
if (this.hasNext()) {
return null;
} else {
return null;
}
}
};
@Override
public Set<Entry<K, HashSet<V>>> entrySet(){
return contents.entrySet();
}
}