基于键对hashmap进行排序

时间:2011-10-22 16:14:09

标签: java hashmap

我在java中有以下hashmap:

  

{B046 = 0.0,A061 = 3.0,A071 = 0.0,B085 = 0.0,B075 = 3.0,B076 = 9.0,B086 = 3.0,B095 = 0.0,B096 = 0.0,A052 = 0.0,B066 = 0.0,B056 = 9.0,B065 = 0.0,B055 = 9.0}

我应该如何对hashmap进行排序,以便将Alphabet和数字数字考虑在内?

生成的hashmap应如下所示:

  

{A052 = 0.0,A061 = 3.0,A071 = 0.0,B046 = 0.0,B055 = 9.0,B056 = 9.0,B065 = 0.0,B066 = 0.0,B075 = 3.0,B076 = 9.0,B085 = 0.0,B086 = 3.0,B095 = 0.0,B096 = 0.0}

感谢帮助!

9 个答案:

答案 0 :(得分:218)

使用已排序的TreeMap

Map<String, Float> map = new TreeMap<>(yourMap);

它会自动按键排序。我认为自然String顺序在你的情况下会很好。

请注意,由于查找优化而导致的HashMap不会保留顺序。

答案 1 :(得分:23)

将TreeMap与自定义比较器一起使用。

class MyComparator implements Comparator<String>
    {
        public int compare(String o1,String o2)
        {
            // Your logic for comparing the key strings
        }
    }

TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());

当您添加新元素时,它们将自动排序。

在您的情况下,甚至可能不需要实现比较器,因为字符串排序可能就足够了。但是如果你想实现特殊情况,比如小写字母在大写字母之前出现,或者以某种方式处理数字,请使用比较器。

答案 2 :(得分:10)

TreeMap是您进行此类排序的最佳选择(自然)。 TreeMap根据键自然排序。

HashMap不会保留广告订单,也不会对地图进行排序。 LinkedHashMap会保留插入顺序,但不会自动对地图进行排序。 TreeMap界面中只有Map按照自然顺序对数据进行排序(数字为第一个,大写字母为第二个,小写字母为最后一个)。

答案 3 :(得分:5)

使用TreeMap,虽然地图“看起来像那样”有点模糊 - 你也可以根据你的标准对键进行排序,然后迭代地图,检索每个对象。

答案 4 :(得分:3)

只需使用TreeMap即可。它实现了SortedMap接口,因此自动对其包含的密钥进行排序。您的密钥可以按字母顺序排序以获得所需的结果,因此您甚至不需要提供比较器。

HashMaps永远不会排序。 coulkd对HashMap唯一做的就是获取所有键,并将它们存储在有序集或列表中并对List进行排序。

答案 5 :(得分:3)

使用 TreeMap ,您可以对地图进行排序。

Map<String, String> map = new HashMap<String, String>();        
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
    System.out.println(str);
}

答案 6 :(得分:3)

您可以使用TreeMap,它会以排序的形式存储值。

Map <String, String> map = new TreeMap <String, String>();

答案 7 :(得分:0)

TreeMap将自动按升序排序。如果要按降序排序,请使用以下代码:

将以下代码复制到您的类内和主要的execute方法之外:

static class DescOrder implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {      
        return o2.compareTo(o1);
    }
    }

然后按照您的逻辑:

TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder());
map.put("A", "test1");
map.put("C", "test3");
map.put("E", "test5");
map.put("B", "test2");
map.put("D", "test4");

答案 8 :(得分:0)

使用TreeMap(构造函数):

WHERE

使用TreeMap(PutAll方法):

Map<String, Float> sortedMap = new TreeMap<>(yourMap);

地图界面的实现

  1. TreeMap -插入时自动按升序对键进行排序。
  2. HashMap -不会保留插入顺序
  3. LinkedHashMap -将保持插入顺序。