Question 187
Given:
13. public static void search(List<String> list) {
14. list.clear();
15. list.add(”b”);
16. list.add(”a”);
17. list.add(”c”);
18. System.out.println(Collections.binarySearch(list, “a”));
19. }
What is the result of calling search with a valid List implementation?
A. 0
B. 1
C. 2
D. a
E. b
F. c
G. The result is undefined.
 答案是:G为什么不确定呢?
明明开始clear了啊~而且我自己测试十几次,都是输出1啊- -

解决方案 »

  1.   

    我觉得可能和采用List的哪个实现有关系吧 
      

  2.   

    a valid List implementation?
    你随便实现一个List,保存顺序自己说了算,结果你能确定吗
      

  3.   

    List常用实现类为ArrayList,但是它并不是只有这一个实现类,不同的实现类最终数据在list的位置可能是不一样的。
      

  4.   


    public static void main(String[] args) {
    Test t = new Test();
    List<String> list1 = new ArrayList<String>();
    list1.add("abc");
    search(list1);
    } public static void search(List<String> list) {
    list.clear();
    list.add("b");
    list.add("a");
    list.add("c");
    System.out.println(Collections.binarySearch(list, "a"));
    }result: 1
      

  5.   

    LZ你测试了十几次 肯定都是用了ArrayList 吧。
      

  6.   

    LZ是想问为什么答案是G 不是B。
    正如肥企鹅所说的,如果这个LIST是自己写的,add方法的顺序自己定的,那就不能确定"a"所在的index就一定是1了。
      

  7.   

    看清楚噢,那是list接口啊,你怎么测试的啊
      

  8.   


    答案不是1答案是输出不确定啊~~~有些回答说是和实现有关,可是API上:public interface List<E>extends Collection<E>有序的 collection(也称为序列)。
    此接口的用户可以对列表中每个元素的插入位置进行精确地控制。
    用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。所有实现List接口的都应该是有顺序的啊,按照索引找到确定位置元素,这个是接口要求啊- -
      

  9.   

    binarySearch 要求list是排序过的。没有排序就binarySearch,所以结果不确定。