3

在您可以通过间接访问实际访问的数组中进行二进制搜索的最佳方法是什么?
这意味着我有一个Integer[]存储 a 的索引,该索引String[]表示String[]
Eg的排序版本,Integer[] idxes= {5, 4, 0, 3 , 1, 2}这意味着String[5]orString[idxes[0]]是字典顺序上最低的字符串。
我希望描述清楚。如果它是 的一部分,那么
通过idexesfor a进行二进制搜索的最佳方法是什么?StringString[] 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);
      }         
    }
});

k搜索词在哪里,words[]String[]我前面提到的。
这行得通,但我不喜欢我在api-1中传递的内容。 有没有更好的方法来解决这个问题? binarySearch

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.binarySearchList

于 2012-07-02T15:19:14.397 回答