Как перебрать HashMap, используя естественный порядок entrySet ()? - PullRequest
7 голосов
/ 11 августа 2011

Моя карта содержит ключи, отсортированные в алфавитном порядке.Когда я его отображаю, я использую entrySet (). Iterator (), но мои результаты не в алфавитном порядке.Как я могу получить свои результаты в порядке?

Ответы [ 5 ]

14 голосов
/ 11 августа 2011

Нет, ваша карта не содержит элементы в алфавитном порядке.Тогда вы можете иметь .put(..) в таком порядке, но карта не имеет определенного порядка итераций.

Другие предлагают использовать SortedSet, но вы также можете использовать LinkedHashMap.Это гарантирует порядок итераций:

Эта реализация (LinkedHashMap) избавляет своих клиентов от неуказанного, обычно хаотического порядка, предоставляемого HashMap (и Hashtable), без увеличения стоимости, связанной с TreeMap

12 голосов
/ 11 августа 2011

Использование TreeMap :

Реализация на основе красно-черного дерева NavigableMap.Карта сортируется в соответствии с естественным порядком ее ключей или Comparator, предоставленным во время создания карты, в зависимости от того, какой конструктор используется ...

1 голос
/ 11 августа 2011

Вы можете использовать ConcurrentSkipListMap или TreeMap .

1 голос
/ 11 августа 2011

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

A TreeMap, с другой стороны, будет поддерживать какой-то порядок (вы можете сами диктовать это, внедряя интерфейс Comparable), поэтому, если вы получите его набор записей, он придет к вам в алфавитном порядке.String уже реализует Comparable, поэтому они будут возвращены вам в алфавитном порядке.

1 голос
/ 11 августа 2011

Моя карта содержит ключи, отсортированные в алфавитном порядке

Это не так.

Используйте http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html или сортируйте ключи перед повторением

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