Итерация по HashMap - PullRequest
       25

Итерация по HashMap

2 голосов
/ 10 августа 2011

Хорошо, так что в настоящее время я работаю над методом поиска, искомые термины просматриваются в базе данных, и подходящие продукты добавляются в hashMap с 2 полями Integer.

затем после создания hashmap,элементы должны быть показаны, однако у меня возникают проблемы с получением хэш-карты для распечатки деталей

, вот мой код

public HashMap<Integer, Integer> bankSearch = new HashMap<Integer, Integer>();

и использование

    Iterator it = bankSearch.entrySet().iterator();
    while (it.hasNext()) {
        HashMap.Entry pairs = (HashMap.Entry)it.next();
        System.out.println(pairs.getKey() + " = " + pairs.getValue());
        if (bankItemsN[i] > 254) {
            outStream.writeByte(255);
            outStream.writeDWord_v2(pairs.getValue());
        } else {
            outStream.writeByte(pairs.getValue()); // amount
        }
        if (bankItemsN[i] < 1) {
            bankItems[i] = 0;
        }
        outStream.writeWordBigEndianA(pairs.getKey()); // itemID
    }

текущие ошибки

.\src\client.java:75: cannot find symbol
symbol  : class Iterator
location: class client
                Iterator it = bankSearch.entrySet().iterator();
                ^
.\src\client.java:77: java.util.HashMap.Entry is not public in java.util.HashMap
; cannot be accessed from outside package
                        HashMap.Entry pairs = (HashMap.Entry)it.next();
                               ^
.\src\client.java:77: java.util.HashMap.Entry is not public in java.util.HashMap
; cannot be accessed from outside package
                        HashMap.Entry pairs = (HashMap.Entry)it.next();
                                                      ^
3 errors
Press any key to continue . . .

1 Ответ

9 голосов
/ 10 августа 2011

Получаемые вами ошибки:

  • Вы не импортировали java.util.Iterator

  • HashMap.Entry является частным внутреннимучебный класс.Вы должны использовать Map.Entry

Также вы должны, как говорит templatetypedef, использовать универсальную версию Iterator или использовать конструкцию for-each.

ADDENDUM

Вот пример кода, демонстрирующего оба подхода:

import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;

public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> m = new HashMap<String, Integer>();
        m.put("One", 1);
        m.put("Two", 2);
        m.put("Three", 3);

        // Using a for-each
        for (Map.Entry<String, Integer> e: m.entrySet()) {
            System.out.println(e.getKey() + " => " + e.getValue());
        }

        // Using an iterator
        Iterator<Map.Entry<String, Integer>> it = m.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry e = (Map.Entry<String, Integer>)it.next();
            System.out.println(e.getKey() + " => " + e.getValue());
        }
    }
}
...