我在编程方面仍然很青涩,并且在 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());
}
我确定这只是我错过的简单东西,但我还没有找到答案。我感谢任何帮助,如果需要更多细节,请告诉我。我知道二叉搜索的代码在当前形式下不起作用。
尝试
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()));
你的类的名称是否实现了比较器compare
?
如果你有这样的比较器类:-
public class MyComparator implements Comparator<Song> {
/** Your compare method ***/
}
您对Arrays.binarySearch()
的调用应将new MyComparator()
作为参数。