Как получить элементы в правильном порядке из итератора () - PullRequest
5 голосов
/ 09 августа 2011

Вот мой код для сохранения данных в HashMap и отображения данных с помощью итератора

public static void main(String args[]) {
    HashMap<String, String> hm = new HashMap<String, String>();
    hm.put("aaa", "111");
    hm.put("bbb", "222");
    hm.put("ccc", "333");
    hm.put("ddd", "444");
    hm.put("eee", "555");
    hm.put("fff", "666");

    Iterator iterator = hm.keySet().iterator();

    while (iterator.hasNext()) {
        String key = (String) iterator.next();
        String val = hm.get(key);

        System.out.println(key + " " + val);
    }
}

Но это не отображается в том порядке, в котором я хранил. Может кто-нибудь сказать мне, где я иду не так? Как я могу получить элементы в порядке?

Ответы [ 4 ]

23 голосов
/ 09 августа 2011

A HashMap не имеет гарантированного порядка:

Этот класс не дает никаких гарантий относительно порядка карты;

Используйте LinkedHashMap .

Хэш-таблица и реализация связанного списка интерфейса Map с предсказуемым порядком итераций.

6 голосов
/ 09 августа 2011

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

Из Javadocs:

... реализация интерфейса Map с предсказуемым порядком итерации . Эта реализация отличается от HashMap в том, что поддерживает двусвязный список, работающий через все его записей. Этот связанный список определяет порядок итераций, который обычно порядок, в котором ключи были вставлены в карту (Вставка порядка).

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

HashMap не поддерживает порядок, в котором мы помещаем в него данные. Так что вы можете следовать LinkedHashMap вместо этого. Он сохраняет порядок, в котором мы помещаем данные. LinkedHashMap может использоваться так же, как HashMap.

Map<key,value> map=new LinkedHashMap<key,value>();
map.put("key","value");
map.put("key","value");
map.put("key","value");

// Точно так же вы можете использовать итератор для доступа к данным. Он будет отображать dfata в том порядке, в котором вы добавили его.

0 голосов
/ 09 августа 2011

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

Если вы хотите загрузить данные в некотором порядке, вам нужно отсортировать ключи / или значения.Например, вы можете поместить коллекции записей (Map.entrySet ()) в список и отсортировать их по любым критериям.Или вы можете использовать SortedMap (например, TreeMap) для хранения ваших объектов.

...