Как получить элементы в правильном порядке из итератора ()
Вот мой код для хранения данных в 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 ответа
HashMap не имеет гарантированного заказа:
Этот класс не дает никаких гарантий относительно порядка карты;
Используйте LinkedHashMap.
Реализация хэш-таблицы и связанного списка интерфейса Map с предсказуемым порядком итераций.
Вам нужно использовать LinkedHashMap, потому что он поддерживает порядок своих записей, в отличие от HashMap.
Из Javadocs:
... реализация интерфейса Map с предсказуемым порядком итераций. Эта реализация отличается от HashMap тем, что поддерживает двусвязный список, проходящий через все его записи. Этот связанный список определяет порядок итераций, который обычно является порядком, в котором ключи были вставлены в карту (порядок вставки).
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 в том порядке, в котором вы добавили его.
Причина в том, что HashMap и HashSet не гарантирует порядок сохраненных значений. Положение элементов будет зависеть от размера внутренней таблицы и hashCode ключа.
Если вы хотите загрузить данные в некотором порядке, вам нужно отсортировать ключи / или значения. Например, вы можете поместить коллекции записей (Map.entrySet()) в список и отсортировать их по любым критериям. Или вы можете использовать SortedMap (например, TreeMap) для хранения ваших объектов.