我在编程时仍然非常认真,并且遇到了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());
}
我确信这只是一件我想念的简单事,但我还没有找到答案。我感谢任何帮助,如果需要更多细节,请告诉我。我知道二进制搜索的代码不能以当前的形式工作。
答案 0 :(得分: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()));
答案 1 :(得分:1)
您的类的名称是否实现了Comparator compare
??
如果您的比较器类如下: -
public class MyComparator implements Comparator<Song> {
/** Your compare method ***/
}
您对Arrays.binarySearch()
的来电应以new MyComparator()
作为参数..