Как избежать переупорядочения элементов при помещении в Java HashMap - PullRequest
4 голосов
/ 06 сентября 2011

Я создаю новую карту и вставляю в нее строки (ничего страшного), но я заметил, что строки меняются по мере роста карты.Можно ли остановить это переупорядочение, которое происходит, чтобы элементы на карте сохраняли порядок, в котором они были размещены?

Map<String,String> x = new HashMap<String, String>();
x.put("a","b");
x.put("a","c");
x.put("a","d");

x.put("1","2");
x.put("1","3");
x.put("1","4");

//this shows them out of order sadly...
for (Map.Entry<String, String> entry : x.entrySet()) {
    System.out.println("IN THIS ORDER ... " + entry.getValue());
}

Ответы [ 4 ]

16 голосов
/ 06 сентября 2011

Если вы заботитесь о заказе, вы можете использовать SortedMap. Фактический класс, который реализует интерфейс (по крайней мере, для большинства сценариев) - TreeMap. В качестве альтернативы, LinkedHashMap также сохраняет свой порядок, все еще используя контейнер на основе хеш-таблицы.

8 голосов
/ 06 сентября 2011

Вы можете сохранить его с LinkedHashMap.

6 голосов
/ 06 сентября 2011

HashMap в Java не сортируется http://download.oracle.com/javase/1,5.0/docs/api/java/util/HashMap.html. Если вы хотите, чтобы предсказуемый порядок итераций использовался вместо LinkedHashMap: http://download.oracle.com/javase/1.4.2/docs/api/java/util/LinkedHashMap.html

Вот хорошее обсуждение разницы:реализация LinkedHashMap отличается от HashMap?

4 голосов
/ 06 сентября 2011

Предыдущие ответы верны в том, что вы должны использовать реализацию Map, которая поддерживает порядок. LinkedHashMap и SortedMap каждый делает эти вещи.

Однако важно отметить, что не все коллекции поддерживают порядок, и если порядок важен для вас, вам следует выбрать соответствующую реализацию. Общие HashMaps не поддерживают порядок, не претендуют на это и не могут быть установлены для этого.

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