Если эти «элементы» являются ключи вы можете хранить их в TreeMap
, который будет производить последовательный порядок, основанный на естественного порядка ключей. Обратите внимание, что вам не нужно делать много, за исключением создания новой карты со старой картой передается конструктору:
Map<String,?> map = ?
Map<String,?> orderedMap = new TreeMap<String,?>(map);
Тогда итерация как нормальные:
for(String key : orderedMap.keys()){
}
Если «элементы» являются ЗНАЧЕНИЯ, то вы можете вставить их в качестве ключей в TreeMap
отслеживающих оригинальных ключей а, прочитать порядок сортировки значений, как и раньше (в основном создавая инвертированный индекс):
Map<?,String> map = ?
Map<String,List<?>> orderedVals = new TreeMap<String,List<?>>();
for(Entry<?,String> map : map.entrySet()){
List<?> keys = orderedVals.get(map.getValue());
if(keys == null){
keys = new ArrayList<?>();
orderedVals.put(map.getValue(), keys);
}
keys.add(map.getKey());
}
// now orderedVals has keys in sorted order
for(String val : orderedVals.keys()){
}
Конечно, если вы на самом деле не используете что-либо, связанное с тем, что эти вещи находятся в «хэш-таблице» (я прочитал это как что-то реализующее Map
), тогда вы можете загрузить List
по вашему выбору и отсортировать его по:
List<String> list = new ArrayList<String>(map.values()); // or use map.keys()
Collections.sort(list);
Если вы не счастливы с порядком сортировки по умолчанию для String
, не стесняйтесь написать свой собственный компаратор:
Collections.sort(list, new Comparator<String>(){
public int compare(String left, String right){
return // your impl
}
});
compare
должен возвращать отрицательное число, когда left
приходит первым, 0, если left
и right
- это то же самое и положительное целое число, если на первый взгляд стоит right
.
+1 Неплохой ответ, хотя в случае перевернутой карты я бы предпочел вместо этого использовать «SortedSetMultimap» Guava. (Я выложу запись, выражающую идею через минуту.) –
actullly моя проблема в том, что я должен разбирать эти значения Cijfercode, Crypto Doorloper Kruizword Woordzoker Zweeds из xml.but в xml они находятся в алфавитном порядке, как указано выше. Но при использовании хеш-таблицы для извлечения значений она становится порядком Cijfercode, Doorloper Woordzoker Zweeds Kruizword Crypto, почему это происходит? – chinchu
@chinchu: 'HashMap' не имеет никаких гарантий заказа итераций.Если вы этого хотите, у вас есть два варианта: «TreeMap» (заказ на основе натурального или на основе компаратора) и «LinkedHashMap» (порядок вставки). –