あなたのマスターリスト(pairs
)が、その後変更されない場合は、私は、例えばindex
構造、逆維持するためにTreeMap
を作成お勧めします:要素を検索しながら、
List<String> pairs = new ArrayList<String>(); //list containing 4000 entries
Map<String, Integer> indexMap = new TreeMap<>();
int index = 0;
for(String element : pairs){
indexMap.put(element, index++);
}
今を、すべてを行う必要がある:
要素が電子しない場合は、あなたに必要な
index
または
null
を与える
indexMap.get(element);
xist。また、要素がリストに複数回存在する場合は、indexMap
をMap<String, List<Integer>>
に変更することができます。
あなたの現在のアルゴリズムが繰り返さリストとバイナリ検索を呼び出し、それははるかに高速になりますので、複雑さが反復してO(log n)
TreeMap
に対し保証log(n)
時間コストのためにO(n)
だろう。
HereのドキュメントTreeMap
です。
はい - より効率的な方法は、あなたのペアは、検索() –
使用中のコールひとつひとつの時間をあなたのリストのコピーを作成し、自分自身をリストしていないため、バイナリ検索を書くことです*その他* ['binarySearch()'](https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#binarySearch-java.util.List-T-java.util。 Comparator-)メソッドを使用し、リスト要素を直接比較するための[Comparator'](https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html)を提供します。 – Andreas