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

需要帮助覆盖compareTo吗

印季
2023-03-14

我是一名Java新手,在可比接口中重写compareTo方法时遇到了一些问题。我的代码创建了一个HashMap,将字符串与int关联起来。我希望重写compareTo,以便ArrayList键中的字符串根据其HashMap值排序,而不是按字母顺序排序。然而,在这种实现下,字符串仍然按字母顺序排序。

哦,澄清一下,nameWeight是字符串和整数对的哈希映射。

有什么想法吗?

List<String> keys = new ArrayList<String>(nameWeight.keySet());
System.out.println(keys);
Collections.sort(keys);


public int compareTo(String that){
    int gtr = 1;
    int less = -1;
    int eql = 0;
    System.out.print(this);
    System.out.print(that);
    if(that=="JOHN")
        return less;
    int valThis = nameWeight.get(this);
    int valThat = nameWeight.get(that);
    if(valThis==valThat)
        return eql;
    if(valThis>valThat)
        return gtr;
    if(valThis<valThat)
        return less;
    return gtr;


}

共有1个答案

桂坚
2023-03-14

您正在对字符串列表进行排序,以便调用的compareTo方法是在类String(或其超类)中定义的方法。由于不能修改String,因此必须创建String的子类,在该类中重写compareTo,并使用List

或者,您不使用列表中的String对象,而是使用您创建的类型的对象,并在其中覆盖compareTo(不要忘记将实现可比较的添加到类定义中)。

或者(来自@pst的无耻插件),这可能是最好的解决方案,您将一个比较器传递给排序函数,该函数将用于对字符串进行排序,而不是默认实现。

 类似资料:
  • 我有一个实现可比较接口的类A,和一个扩展A的类B。我需要找到一种方法来覆盖类B中的。 我发现了一个类似的问题不能用可比的父子孙继承并试图实施提供的解决方案 A类: B类: 例外情况: 线程“main”java中出现异常。lang.ClassCastException:T4级。A不能转换为T4级。B(T4.A和T4.B在加载器“app”的未命名模块中)

  • 首先,我是C、C++、C#、Android和Swift的开发人员,但我绝对没有JavaScript、PHP或Web开发经验。 即只接受整数值的输入。 这是刀片代码:

  • 然后,这需要转到数据库,该数据库向工作人员发送返回消息,告诉他们该成员已被添加。 只有工作人员在和系统通话,没有人。

  • 我想使用Python而不是JavaScript来绘制UpSet图,并在github上找到py-不安:https://github.com/ImSoErgodic/py-upset/我使用PyCharm作为集成开发环境,并下载了所有需求。 我试过下面的代码; 运行代码后,它会显示“进程已完成,退出代码为0”,但没有给出任何图形/图表。我怎样才能得到图表?有什么帮助吗?

  • 在一个HTML文件中, 包含许多 ,而在另一个 中, 包含许多 。使用我需要的JavaScript,当我悬停在第一个上时,第一个 的背景颜色会发生变化,以此类推... 匿名用户 你的问题是如此令人困惑,提供一个屏幕截图或绘图表明你实际想要什么。

  • 在我当前的项目中,我正在使用Maven和Spring。我目前正在使用SLF4J记录器来记录服务。代替它,我想使用OWASP-ESAPI记录器。我不想使用安全性,只是日志服务。有人能指导我如何使用记录器,用最少的努力替换slf4j记录器吗?我尝试了很多谷歌搜索,但没有任何帮助。我也会非常感谢一些链接来获得有关记录器的知识。