2017-02-06 2 views
0

Я создал хэш-карту для представления графика. Ключами в моей карте хэша являются вершины, а значения - это ребра. Из моего hashmap я беру все свои вершины и сохраняю их в словаре под названием vertexDictionary. Теперь я хотел бы установить все значения вершинного словаря False, но у меня возникли проблемы с этим. Я попытался использовать итератор, но я получаю сообщение об ошибке в моем коде со звездочкой. Мой код ниже:Настройка всех ключей на то же значение с помощью итератора

public void clearMarks(){ 
// Sets marks for all vertices to false. 
    Set set = graph.entrySet(); 
    Iterator i = set.iterator(); 

    while(i.hasNext()) { 
    Map.Entry g = (Map.Entry)i.next(); 
    *this.graph.put(g.getKey(), false);* 
    } 
} 
+0

Что говорит сообщение об ошибке? – Thanasis

+0

Объявлен 'graph' с использованием дженериков (например,' Map graph; ')? Если так, что строка не будет компилироваться, потому что вы используете необработанные типы. –

+0

http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it –

ответ

0

Метод getKey() возвращает объект. Проблема в том, что вы его не бросаете. Допустим, ваши ключи являются целыми числами, то вы должны изменить свой код на этот:

this.graph.put((int) g.getKey(), false); 
0

У вас есть vertexDictionay, который содержит все вершины, которые вас интересуют, и для каждого из тех, кого вы хотите установить их False ,

Так я предполагаю, что у вас есть некоторые структуры данных, как Map<Integer, Boolean> vertexDictionay;

Вы должны быть в состоянии

for (Map.Entry vertex : vertexDictionay.entrySet()) { 
     vertex.setValue(false); 
    } 

Цикл Еогеасп использует итератор под капотом, как описано here. Это исправляет ошибку несоответствия вашего аргумента и является более читаемым. IMHO

Смежные вопросы