如果Hashmap没有保留顺序,我如何创建Iterator(通过实现iterable)? 我的钥匙应该被订购..我想按降序迭代
答案 0 :(得分:3)
使用TreeMap
可能:
地图根据其键的自然顺序进行排序
另外,来自TreeMap.keySet()
文档:
返回此地图中包含的键的Set视图。 set的迭代器按升序返回键
迭代示例:
TreeMap<K,V> tree;
// ...
for (final String key : tree.keySet()) {
final V value = tree.get(key);
}
答案 1 :(得分:1)
HashMap
确实不会保留广告订单。但是,您可以使用Javadoc所说的LinkedHashMap
(部分)
Map
接口的哈希表和链表实现,具有可预测的迭代顺序。
答案 2 :(得分:0)
您可以将HashMap
中的条目复制到保留顺序的集合(如List
),然后根据键(按相反顺序)对它们进行排序。你说你想按降序对键进行排序,所以我假设键实现了Comparable
,但由于我不知道键的类型是什么,我使用了类型参数K
和V
作为占位符。
Map<K, V> map = new HashMap<>();
List<Map.Entry<K, V>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
@Override
public int compare(Entry<K, V> o1, Entry<K, V> o2) {
Comparable k1 = (Comparable) o1.getKey();
Comparable k2 = (Comparable) o2.getKey();
return -k1.compareTo(k2);
}
});