1

我仍然很擅长编程,并且在 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());
}

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

4

2 回答 2

5

尝试

 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-09-24T17:35:04.900 回答
1

您的班级名称是否实现了 Comparator compare

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

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

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

于 2012-09-24T17:30:09.743 回答