2017-05-15 17 views
0

私はJavaでバイナリ検索を使用して学習しています。整数リストでは、期待されるインデックスを返しますが、charまたはStringリスト(コード例)では負のインデックスが返されますが、これは期待されません(index = -4)。Javaでの文字列バイナリ検索

List<String> str = new ArrayList<>(); 
str.add("Hey"); 
str.add("Hi"); 
str.add("Bye"); 
int index = Collections.binarySearch(str,"Hi"); 
System.out.println(index); 

答えて

2

Listは、バイナリ検索が機能するためにソートする必要があります。 Stringの自然順序付けは辞書順ですので、"Bye""Hey""Hi"の前に来る必要があります。

List<String> str = new ArrayList<>(); 
str.add("Bye"); 
str.add("Hey"); 
str.add("Hi"); 

int index = Collections.binarySearch(str,"Hi"); 
System.out.println(index); 
+1

もっと動的なアプローチ(つまり、手動で注文する必要はありませんが、Javaにはそうするようにしてください)、 'Collections#sort'。 – nbokmans

3

を試してみて、バイナリサーチの前提条件は次のとおりです。基礎となるデータは、をソートする必要があります。

だから、ソートが最初に挙げられます。

そして、そのメソッドから返されるインデックスが0とリストのsize()の間であることを確認したいとします。 という文字列がリストにあり、ゼロ以外のインデックスを返すと予想するのはちょっとおかしいです。

それ以上。 realここに答えてください。盲目的に組み込み機能を使用するだけではありません。 javadoc最初にを読んで、このメソッドが何をしているかを理解してください。たとえば、どの値が返されますか?

関連する問題