日期:2014-05-20  浏览次数:20780 次

Collections类中的binarySearch()方法,使用出错!
Collections类中的binarySearch()方法即完成内容的检索,检索之后会返回内容的位置,但是下面的程序却出现了错误,请前辈们指教!

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo {
public static void main(String args[]) {
List<String> all = new ArrayList<String>();
Collections.addAll(all, "MLDN", "LXH", "mldnjava");
int point = Collections.binarySearch(all, "MLDN");
System.out.println(point);
}
}

MLDN的位置本来应该是0才对,但是程序的运行结果却是-3!

------解决方案--------------------
引用:
Collections类中的binarySearch()方法即完成内容的检索,检索之后会返回内容的位置,但是下面的程序却出现了错误,请前辈们指教!

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Demo {
public static void main(String args[]) {
List<String> all = new ArrayList<String>();
Collections.addAll(all, "MLDN", "LXH", "mldnjava");
int point = Collections.binarySearch(all, "MLDN");
System.out.println(point);
}
}

MLDN的位置本来应该是0才对,但是程序的运行结果却是-3!


那是因为使用二分查找法的对象必须实现comparable接口,JDK中又该方法的说明,按自然顺序排下序就行了,Collections.addAll(all, "MLDN", "LXH", "mldnjava");
加一句Collections.sort(all);就行了