1

私はまだプログラミングにかなり慣れており、Javaの配列でのバイナリ検索の構文に問題があります。バイナリ検索を使用しているクラスとは別のクラスに存在するコンパレータメソッド(オーバーロードされた「compare」メソッド)を呼び出そうとしています。基本的に、私の目標は、に格納されている変数の1つだけを配列で検索することです。配列を構成するオブジェクト。コンパレータがないと、検索に必要な基準のみをキーとして保持する「ダミー」オブジェクトを作成したため、これを行うことができませんでした。

バイナリ検索のコードは次のとおりです。

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 に答える