【问题标题】:Java array binary search on object with comparator in another classJava数组二进制搜索对象与另一个类中的比较器
【发布时间】:2012-09-16 04:44:54
【问题描述】:

我仍然很擅长编程,并且在 Java 中对数组进行二进制搜索的语法遇到了问题。我正在尝试调用一个比较器方法(重载的“比较”方法),它存在于与我使用二进制搜索的类不同的类中。基本上我的目标是仅在数组中搜索存储的变量之一组成数组的对象。如果没有比较器,我将无法成功,因为我创建了一个“虚拟”对象来仅保存搜索所需的条件作为键。

这是我的二进制搜索代码:

Song searchSong = new Song(artistInput, artistInput, artistInput);
int search = Arrays.binarySearch(songs, searchSong, new compare<Song>());

这是我在一个单独的类中的重载比较器代码:

public int compare (Song firstSong, Song secondSong) {
  return firstSong.getArtist().compareTo(secondSong.getArtist());
}

我确定这只是我缺少的一些简单的东西,但我还没有找到答案。我很感激任何帮助,如果需要更多细节,请告诉我。我知道二进制搜索的代码在当前形式下不起作用。

【问题讨论】:

  • 1) 哪个是问题(编译错误/运行时错误/错误结果)? 2) 你的课程是否扩展java.util.Comparator?和 3) Java 中的所有类名都以大写字母开头
  • 抱歉,您的问题到底是什么?您可能是 stackoverflow 和编程的新手,但您确实意识到您必须提出问题,对吧?我猜你的意思是覆盖而不是重载,对吗?是的,除非 compare 是一个类,否则您提供的代码 sn-ps 将无法编译。在这种情况下,您应该用大写字母命名。这听起来可能很苛刻,但您需要先掌握基础知识,然后再开始使用二进制搜索等 API。
  • 比较是一种方法,而不是一个类。对不起,如果我不清楚。是的,我的意思是覆盖,而不是超载。

标签: java arrays search binary


【解决方案1】:

你的类名是否实现了 Comparator compare??

如果你有这样的比较器类:-

public class MyComparator implements Comparator<Song> {
     /** Your compare method ***/
}

您对Arrays.binarySearch() 的调用应将new MyComparator() 作为参数..

【讨论】:

  • 我很抱歉,我想我不是很清楚。 Song 类实现了 Comparator。我在该类中用我自己的比较方法覆盖了比较方法。在另一个类中,我正在调用二进制搜索并尝试使用我在 Song 类中编写的比较方法。但是,我相信我发现我做错了什么。感谢您的反馈。
  • 没关系.. 有时事情会搞砸.. 归根结底,重要的是您的问题是否得到解决。
【解决方案2】:

试试

 Song searchSong = new Song(artistInput, artistInput, artistInput);
 int search = Arrays.binarySearch(songs, searchSong, new Comparator<Song>(){
    @Override
    public int compare(Song s1, Song s2) {
      return s1.getArtist().compareTo(s2.getArtist());
    }
 });

Java 8 更新:

 int search = Arrays.binarySearch(songs, searchSong, 
   (Song s1, Song s2) -> s1.getArtist().compareTo(s2.getArtist()));

【讨论】:

    猜你喜欢
    • 2012-10-02
    • 2023-03-12
    • 1970-01-01
    • 2018-08-04
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    相关资源
    最近更新 更多