【问题标题】:how to sort <Integer, MyObject> map如何对 <Integer, MyObject> 地图进行排序
【发布时间】:2013-08-28 04:51:06
【问题描述】:

我有这样的地图:

Map<Integer, MyEntry> map = new HashMap<Integer, MyEntry>();

MyEntry 是:

public class MyEntry {
    private String title;
    private String value;

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}

将值放入 map 后,我想对其进行排序。第一个元素最小,最后一个元素最大。

【问题讨论】:

    标签: java sorting hashmap


    【解决方案1】:

    对于按键排序,您可以使用SortedMap - 一种常见的实现是TreeMap。由于整数具有自然排序顺序,因此您无需执行任何特殊操作,只需将它们放入 TreeMap

    如果您想按值排序,这个问题Sort a Map<Key, Value> by values (Java)中描述了几种技术

    【讨论】:

      【解决方案2】:

      如果要排序,可以使用 2 种类型 LinkedHashMap 或者最常用的是 TreeaMap

      Map<Integer, MyEntry> map = new LinkedHashMap<Integer, MyEntry>();
      

      Map<Integer, MyEntry> map = new TreeMap<Integer, MyEntry>();
      

      要添加一些小样本,您可以使用以下代码:

      Map<Integer, String> map = new TreeMap<Integer, String>();
      map.put(1, "one");
      map.put(3, "three");
      map.put(2, "two"); 
      // prints one two three   
      for(Integer key : map.keySet()) {
         System.out.println(map.get(key);
      }
      

      一些有用的:

      Sort using TreeMap Example

      Another usefull sort example

      干杯,

      【讨论】:

      • LinkedHashMap 按插入顺序或访问顺序(这可能不是自然顺序)排序。一个有用的实现,但在这里没有帮助。
      • 如果您想添加已排序的元素,它将为您提供帮助,如果您有 A、B、C,如果您在 HashMap 中添加它们,这将始终相同,但在 LinkedHashMap 中它们将保持顺序。我只是想表明这是在 LinkedHashMap 中添加排序元素的好方法,这是 HashMap 中无法做到的
      【解决方案3】:

      HashMap 不保证您对map 进行排序后的顺序。如果要按keys 对地图进行排序,请使用TreeMap

      这可能会有所帮助:Order HashMap<String,Integer> according Integer

      【讨论】:

      • 您确定不能对HashMap 进行排序吗?
      • 来自 Java API 文档This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.
      • @sᴜʀᴇsʜᴀᴛᴛᴀ 我知道。我不同意你的第一个说法,因为即使你不能动态排序HashMap,当然你仍然可以在修改HashMap 之后对HashMap 进行排序(例如添加和删除Entrys)跨度>
      • @JoshM 是的,我们可以对其进行排序。但不保证顺序:)。是的,我的陈述误导了我们不能这样做。但实际上我的意图是不能保证排序。谢谢。已编辑:)
      • @sᴜʀᴇsʜᴀᴛᴛᴀ 很公平,但这是假设HashMap 正在以某种方式被修改:)。如果您自己手动对密钥进​​行排序(在每次addremove 调用之后)并且没有对HashMap 执行进一步的操作以危及订单,那么订单会如何变化?
      猜你喜欢
      • 1970-01-01
      • 2013-01-08
      • 2013-12-29
      • 1970-01-01
      • 2012-04-13
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多