#java #dictionary #iterator #set
#java #словарь #итератор #установить
Вопрос:
У меня возникла проблема, когда я должен написать итератор для AbstractMap, где значения представлены в HashSet. Это класс, с которым я работаю:
public class SetMap<K, V> extends AbstractMap<K, HashSet<V>> implements Iterable<V>
Инструкции, которые мне были даны, заключаются в следующем:
«Реализуйте итератор таким образом, чтобы проходили только значения V . Значения просматриваются сначала в порядке убывания размера объектов хэш-набора, связанных с ключами, а затем в порядке итерации для хэш-набора.»
Я в принципе не уверен в том, как подойти к написанию моего пользовательского hasNext()
и Next()
, учитывая, что я должен проходить только хэш-набор внутри карты.
Я новичок в Java, поэтому просмотр многомерных карт, особенно с наборами в качестве некоторых значений, очень сбивает меня с толку.
Пример того, что могла бы сделать моя основная функция-
SetMap<String, Integer> map = new SetMap<>();
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
Любая помощь или соответствующие ресурсы были бы высоко оценены.
Комментарии:
1. Требование «Значения проходят сначала в порядке убывания размера объектов HashSet, связанных с ключами» означает, что сначала (когда запрашивается итератор) необходимо извлечь все значения карты и поместить их в массив, затем отсортировать эти
HashSet
элементы по размеру. Затем вы в основном перебираете этот массив и вкладываете для каждого элемента массива поHashSet
элементам.
Ответ №1:
Используйте хэш-набор get(String s)
SetMap<String, Integer> map = new SetMap<>();
map.addValue("B", 4);
map.addValue("A", 0);
map.addValue("A", 1);
map.addValue("B", 3);
map.addValue("A", 2);
for (String s : map) {
System.out.println(map.get(value));
}
}