当前位置: 首页 > 知识库问答 >
问题:

根据键大小对HashMap键进行排序

钱言
2023-03-14

我有一个hashmap,其中的键是字符串。我需要获取这些键并根据键大小(即字符串长度)对其进行排序,然后将其存储在某个ArrayList中。

注意:如果两个键的大小相同,那么我们可以把它放在任何顺序。

为(如)。

hm.put("abc","hi");
hm.put("A","hi");
hm.put("ab","hi");
hm.put("a","hi");

共有1个答案

赖渊
2023-03-14

您可以使用自定义的比较器按长度对键进行排序,如下所示:

List<String> s = new ArrayList<>(hm.keySet());
Collections.sort(s, new Comparator<String>(){
            @Override
            public int compare(String s1, String s2){
                 return Integer.compare(s2.length(), s1.length());
            }
});
TreeSet<String> ts = new TreeSet<>(new Comparator<String>(){
                     @Override
                     public int compare(String s1, String s2){
                           int cmp = Integer.compare(s2.length(), s1.length());
                           return cmp != 0 ? cmp : s1.compareTo(s2);
                     }
});
ts.addAll(hm.keySet());

请注意,如果所比较的字符串对的长度相同,则还必须比较它们的词典顺序,否则树集将只包含长度不同的字符串(即“a”或“a”不会添加到集合中)

 类似资料:
  • 边走边学Java(Python背景)。简单的单词计数程序在Java7代码(不能用J8!)。 我有一个单词的哈希图:计数对。现在我需要按计数(递减顺序)排序,并打破按字母顺序使用word的联系。 我正在寻找对这个想法的反馈: 遍历HashMap中的映射项(me) 使用me.getkey=K和me.getvalue=v new map.entry reverse_me=(V,K){不确定此语法} 将r

  • 问题内容: 你好,我需要实现一个接收HashMap并按键对它的值进行排序(mergeSort)的方法 (不使用TreeMap,SortedMap或Collections.Sort或使用JAVA Packages中的任何排序解决方案) 。我的问题是处理通配符类型…这是我的实现(由于使用通配符而返回编译错误) 我感谢您的帮助! 问题答案: 像其他评论者一样,我建议您阅读Java中的泛型主题。您在合并中

  • 问题内容: 该中应该是未排序,但被相对于分类。 我遇到了这个问题,因为我需要插入顺序数据。因此,我改用了。但是我还是很困惑为什么要对它进行排序。 有人可以解释吗? 我做了一个简单的例子来查看排序。 结果: 编辑: 我试图插入使用50支随机数的,我发现了一些数据未排序。但是,它仍然设法对大多数整数进行排序。 随机结果: 问题答案: 这是一个巧合(不是真的,而是与哈希算法有关)。 尝试添加 最后。 输

  • 问题内容: 我试图根据键中的日期对此HashMap进行排序 我的哈希图: 问题答案: 使用代替。正如已经实现的那样,它将在插入时自动排序。 或者,如果您有一个现有的并且想要基于它创建一个,则将其传递给构造函数: 也可以看看: Java教程-地图实现 Java教程-对象排序

  • 编辑:对于同样的问题,我尝试编写一个比较器。但它不起作用