Java — Как написать итератор, который перебирает значения хэш-набора в пределах карты

#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));
}
  

}