Вопрос о карте Java - PullRequest
       2

Вопрос о карте Java

2 голосов
/ 25 декабря 2010

У меня есть одна карта, которая содержит несколько имен и чисел

Map<String,Integer> abc = new HashMap<String,Integer>();

Работает нормально.Я могу поместить некоторые значения в него, но когда я вызываю его в другом классе, это дает мне неправильный порядок.Например:

Я положил

abc.put("a",1);
abc.put("b",5);
abc.put("c",3);

    Iterator<String> iter = abc.keySet().iterator();

    while (iter.hasNext()) {

        String name = iter.next();
        System.out.println(name);
    }

, когда-нибудь возвращается порядок (b, a, c) и некоторое время (a, c, b).

Что с этим не так?Есть ли какой-то шаг, который я пропускаю, когда я вызываю эту карту?

Редактировать: я изменил на HashMap, и результат все тот же

Ответы [ 4 ]

5 голосов
/ 25 декабря 2010

Единственное, что не так, это ваши ожидания.Интерфейс Map не дает никаких гарантий относительно порядка итерации, а реализация HashMap основана на хеш-функциях, что означает, что порядок итерации в основном случайный и иногда будет полностью изменяться при добавлении новых элементов.

Есливам нужен определенный порядок итераций, у вас есть следующие опции:

  • SortedMap взаимодействует с его реализацией TreeMap - они гарантируют порядок итераций в соответствии с естественным упорядочением ключей (или упорядочением* экземпляр 1011 *
  • Используйте List вместо Map - этоимеет четко определенный порядок итераций, на который вы можете повлиять в деталях.
2 голосов
/ 25 декабря 2010

Я думаю, вам нужно LinkedHashMap .

0 голосов
/ 25 декабря 2010

Если вы хотите получить значения карты в том же порядке, который вы использовали для их вставки, используйте LinkedHashMap вместо.

0 голосов
/ 25 декабря 2010

TreeMap всегда будет иметь ключи в их естественном порядке (если вы не предоставите компаратор). Если вы видите порядок иначе, это будет то, как вы смотрите на карту и что вы делаете с ней.Если вы сомневаетесь, используйте отладчик, и вы увидите, что заказ отсортирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...