3

インダイレクションを介して実際にアクセスできる配列でバイナリ検索を行う最良の方法は何でしょうか? つまり、orが辞書順で最も低い文字列であることを
意味する Egのソートされたバージョンを表すInteger[]a のインデックスを格納する があります。 説明が明確であることを願っています。の一部である場合、 for を 介してバイナリ検索を実行する最良の方法は何ですか?String[]String[]
Integer[] idxes= {5, 4, 0, 3 , 1, 2}String[5]String[idxes[0]]

idexesStringString[] words

私がしたことは次のとおりです。

int pos = Arrays.binarySearch(idexes, -1, new Comparator<Integer>(){

    @Override
    public int compare(Integer o1, Integer o2) {

    if(o1 == -1){
        return k.compareTo(words[o2]);
    }
    else{
        return words[o1].compareTo(k);
      }         
    }
});

wherekは検索ワードで、words[]String[]前述の です。これは機能しますが、 APIで渡す I が
好きではありません。 これにアプローチするより良い方法はありますか? -1binarySearch

4

1 に答える 1

2
class SortedListView extends AbstractList<String> implements RandomAccess {
  // stringArray, idxes should be fields, initialized in a constructor
  public int size() {
    return stringArray.length;
  }
  public String get(int index) {
    return stringArray[idxes[index]];
  }
};

Collections.binarySearch次に、その上で使用できますList

于 2012-07-02T15:19:14.397 に答える