【问题标题】:Java sorting and HashMapJava排序和HashMap
【发布时间】:2012-04-27 09:05:26
【问题描述】:

我有一个HashMap<String, Integer> 我如何对这个数据结构进行排序并保留键值映射?我想按 VALUES 而不是键排序。

Collection<Integer> counts = tableFrequency.values();

然后我丢失了键映射。或者有没有更好的关联数据结构可以用来代替 HashMap?

【问题讨论】:

标签: java sorting data-structures hashmap


【解决方案1】:

要按其值对Map 进行排序,您可以获取其entrySet 并使用自定义Comparator 对其进行排序。

List<Entry<K,V>> sorted = new ArrayList<>(map.entrySet());
Collections.sort(sorted, new Comparator<Entry<K,V>>() {
    public int compare(Entry<K,V> o1, Entry<K,V> o2) {
        return o1.getValue().compareTo(o2.getValue());
    }
};

【讨论】:

  • 我想按值而不是键排序。这将如何运作?
  • 你知道我可以使用什么数据结构来按值排序吗?
  • Entry 定义在哪个库中?
  • @CodeKingPlusPlus 好像是静态导入了 Map.Entry。
  • @CodeKingPlusPlus 是java.util.Map 的嵌套类。
【解决方案2】:

TreeMap 类是你想要的:

TreeMap treeMap = new TreeMap();

treeMap.put("One", new Integer(1));
treeMap.put("Two", new Integer(2));

Object obj = treeMap.get("Two");
System.out.println(obj);

它使用 compare() 方法来对元素进行排序。

由于您的新问题是关于按值排序,因此这是 this post 的副本

【讨论】:

  • 它似乎已经对我的键进行了排序,我希望它按值排序
  • 为什么投反对票?原始帖子不包含任何按值排序的概念...
【解决方案3】:

TreeMap 按照您添加它们的顺序保持元素。这对您来说似乎是一个完美的答案。

但请注意,某些操作会比使用 HashMap 慢得多,例如搜索...

【讨论】:

  • 不,TreeMap 会在您添加元素时对其进行排序。
  • 我想按值而不是键排序
猜你喜欢
  • 2013-04-28
  • 2011-12-24
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 2021-11-23
  • 2017-09-22
相关资源
最近更新 更多