繁体   English   中英

根据键对hashmap进行排序

[英]Sorting hashmap based on keys

我在java中有以下哈希图:

{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, B060, B060, B060=0.0. =0.0, B055=9.0}

我应该如何对哈希图进行排序,以便将字母表和数字都考虑在内?

生成的哈希图应如下所示:

{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,B09,B056=9.0, =0.0,B096=0.0}

感谢您的帮助!

使用排序的TreeMap

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

它会自动放置按键排序的条目。 我认为在您的情况下,自然String排序会很好。

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

使用带有自定义比较器的 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());

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

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

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

HashMap不保留插入顺序,也不对映射进行排序。 LinkedHashMap保持插入顺序,但不会自动对地图进行排序。 只有Map界面中的TreeMap按照自然顺序对地图进行排序(数字在前,大写字母在后,小写字母在后)。

使用TreeMap ,尽管让地图“看起来像那样”有点模糊——您也可以根据您的标准对键进行排序并遍历地图,检索每个对象。

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

您可以使用TreeMap以排序形式存储值。

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

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

HashMap 从不排序。 您可以使用 HashMap 做的唯一一件事就是获取所有键,并将它们存储在排序集或列表中并对列表进行排序。

使用 TreeMap(构造函数):

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

使用 TreeMap(PutAll 方法):

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

Map接口的实现:

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

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

在您的类中和主执行方法之外复制以下代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM