Если этими "элементами" являются ключи , вы можете хранить их в 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
стоит первым.