Приведение итератора ключей HashMap к списку итераторов - PullRequest
4 голосов
/ 25 марта 2012

Мне нужно получить доступ к ключевым элементам HashMap, как к связанному списку с указателями prev и curr, чтобы провести некоторые сравнения. Я вписал HashMap Key Iterator в List Iterator для доступа к текущим, а также к предыдущим ключевым элементам. Ниже приведен код

HashMap<Node,Double> adj;
ListIterator<Node> li = (ListIterator<Node>) adj.keySet().iterator();

while (li.hasNext()) {
    if (li.hasPrevious()) {
                prev = li.previous();
    } else {
                prev = null;
    }
...
}

Но я получаю следующее исключение

Exception in thread "main" java.lang.ClassCastException: java.util.HashMap$KeyIterator cannot be cast to java.util.ListIterator
at Types$AdjList.makeConnected(Types.java:357)
at Main.main(Main.java:89)

Есть ли какой-нибудь способ, которым я могу ввести итератор ключей HashMap в List Iterator, чтобы решить мою задачу. Любая помощь будет оценена.

Спасибо

Сомнатй

Ответы [ 3 ]

9 голосов
/ 25 марта 2012

iterator из adj.keySet() нельзя преобразовать в ListIterator, поскольку его набор ключей (, возвращаемый методом keySet()) не является list, а Set , Таким образом, у него нет порядка.

Вы можете попытаться использовать LinkedHashMap для этой цели или создать новый List экземпляр из keySet, подобный этому

List<Node> nodes = new ArrayList<Node>(adj.keySet());

и затем выполните нужные манипуляции.

0 голосов
/ 23 августа 2016
    public HashMap JsonToMap(JSONObject js,HashMap hm){
         @SuppressWarnings("unchecked")
         Iterator<String> nameItr =  js.keySet().iterator();
         while(nameItr.hasNext()) {
             String name = nameItr.next();
             hm.put(name, js.get(name).toString());
         }
        return hm;
    }
0 голосов
/ 25 марта 2012

Попробуйте это ..

HashMap<Node,Double> adj;
Iterator<Node> li = (Iterator<Node>) adj.keySet().iterator();

while (li.hasNext()) {
    if (li.hasPrevious()) {
                prev = li.previous();
    } else {
                prev = null;
    }
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...