- 締切済み
Collections.binarySearchについて
Collections.binarySearchを使うには、ソートする必要があることがわかりますが、ソートしない場合、結果はどうなるのはちょっと気になってしまっているので質問させてください。 例:public class char6_33 { public static void main(String args[]){ List list=new ArrayList(); list.add("b"); list.add("a"); list.add("c"); System.out.println(Collections.binarySearch(list,"a")); System.out.println(Collections.binarySearch(list,"b")); System.out.println(Collections.binarySearch(list,"c")); } 実行してみたら、結果は 1 -3 2 になるですが、なぜでしょうか。 もしSystem.out.println(Collections.binarySearch(list,"a"));の前にCollections.sort(list);を追加すれば、結果は0 1 2になるのは理解するできが、ソートしない場合はなぜ1 -3 2 になるのはちょっと理解できません。ご存知の方はぜひご教授ください。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
お礼
foxa-gogoさん ご回答ありがとうございました。 勉強不足ですみませんが、書いていただいてことはよく理解できません。以下のように質問させていただきます。 まず、 indexedBinarySearchというのはどういうのタイミングで呼ばれますかね?? もしlistはちゃんとソートされた場合もindexedBinarySearchが呼ばれるでしょうか。 あと、 >int cmp = compare(midVal, key); //compare("a","a") = 0(もしキ>ーがbならcompare("a","b")は負数を返し、low = mid+1 これもよくわかりません、compareどういう動きなのかよくわかりません。 さらに、恐縮ですが、追加質問させていただきます。実は今「徹底攻略 Java2 プログラマ問題集」という問題集を勉強しておりますが、この中のもうひとつのCollections.binarySearch問題に困っています。 以下の通りです。 以下のプログラムをコンパイルし、実行した結果として何でしょう。 List<Employee> list=new ArrayList<Employee>(); list.add(new Employee("One")); list.add(new Employee("Three")); list.add(new Employee("Two")); SortMethod sort=new SortMethod(); int i=Collections.binarySearch(list,new Employee("Two"),sort); System.out.println(i); import java util.*; class Employee{ private String id; Employee(String id){ this.id=id; } public String getId(){return id;} public String toString(){return this.id+"";} class SortMethod implements Comparator<Employee>{ public int compare(Employee emp1,Employee emp2){ return emp2.getId().compareTo(emp1.getId()); } } この問題の答えは-1です。ここでもソートしてなくて、Collections.binarySearchを利用したんですよね。でもなぜ-1になるのかどうしても分からなくて、すみませんが、まとめてご教授していただければ幸いと存知ます・