在Java中,根据key.length()对哈希图进行排序。

我有一个这样的哈希图。

HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("java",4);
map.put("go",2);
map.put("objective-c",11);
map.put("c#",2);

现在我想按键的长度对这个图进行排序,如果两个键的长度相等(例如go和c#都是2),那么就按alphba顺序排序,所以我希望得到的结果是这样的:

打印结果:Objective-c, 11java, 4c#, 2go, 2

这是我自己的attamp,但它根本无法工作……事实上,’compareTo’方法显示为红色(无法编译)……请有人帮我一些代码示例……我有点困惑如何使用比较器类来定制比较器。

      HashMap<String,Integer> map = new HashMap<String,Integer>();
          map.put("java",4);
          map.put("go",2);
          map.put("objective-c",11);
          map.put("c#",2);

      Map<String,Integer> treeMap = new TreeMap<String, Integer>(
                new Comparator<String>() {
                    @Override
                    public int compare(String s1, String s2) {
                        return s1.length().compareTo(s2.length());
                    }
                }
        );

实际上’compareTo’方法显示为红色(无法编译)……请谁能帮我提供一些代码示例……我对如何使用比较器类自定义比较对象有点困惑……。

解决方案:

编译器在抱怨,因为你不能调用 “go”,2; map.put(“objective-c”,11); map.put(“c#”,2); 现在我想…。compareTo 关于 int. 正确的排序方式是: 。

Map<String, Integer> treeMap = new TreeMap<String, Integer>(
    new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            if (s1.length() > s2.length()) {
                return -1;
            } else if (s1.length() < s2.length()) {
                return 1;
            } else {
                return s1.compareTo(s2);
            }
        }
});

前两个条件是比较两幅地图的长度 String并相应返回一个正数或负数。第三个条件是比较 String如果它们的长度相等,则在词法上称为 “s”。

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何用Nodejs处理ms-rest-azure的函数应用中的异常。

2022-9-28 17:36:19

未分类

在Haxe中,关于主类的命名有什么规定?

2022-9-28 17:36:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索