使用可迭代到Hashmap实现迭代器 - 这可能吗?

时间:2014-11-29 03:45:37

标签: java hashmap iterable

如果Hashmap没有保留顺序,我如何创建Iterator(通过实现iterable)? 我的钥匙应该被订购..我想按降序迭代

3 个答案:

答案 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,但由于我不知道键的类型是什么,我使用了类型参数KV作为占位符。

    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);
        }
    });