黑马程序员技术交流社区

标题: Collections类在使用时不小心遇到的问题,但我不明白 [打印本页]

作者: 刘辉    时间: 2013-3-23 23:17
标题: Collections类在使用时不小心遇到的问题,但我不明白
本帖最后由 樱木花道10 于 2013-3-24 23:18 编辑

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsDemo {
        public static void main(String[] args) {
                // 创建集合对象
                List<Integer> list = new ArrayList<Integer>();
                // 添加元素
                list.add(9);
                list.add(5);
                list.add(4);
                list.add(6);
                list.add(7);
                list.add(8);
                list.add(3);
                list.add(12);
                list.add(11);
                 Collections.reverse(list);
                 int index = Collections.binarySearch(list, 4);
                 System.out.println("index:" + index);
                System.out.println("list:" + list);
        }
}
运行结果:index:-1
list:[11, 12, 3, 8, 7, 6, 4, 5, 9]
看不懂?为什么index的值是-1呢,而且将int index = Collections.binarySearch(list, 4)里的4换为9后,输出的index值却是8了,搞不明白,求解。。。。

作者: 魏福伟    时间: 2013-3-23 23:35
binarySearch为二分搜索法,前提是查找的list是有序的,

在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过 sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个。
作者: 曹玉龙    时间: 2013-3-23 23:41
原因楼上已经说了,就是使用二分法之前数组要有序,代码给你修改了一个,运行看看对比就清楚了.
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.List;

  4. public class Demo {
  5.         public static void main(String[] args) {
  6.                 // 创建集合对象
  7.                 List<Integer> list = new ArrayList<Integer>();
  8.                 // 添加元素
  9.                 list.add(9);
  10.                 list.add(5);
  11.                 list.add(4);
  12.                 list.add(6);
  13.                 list.add(7);
  14.                 list.add(8);
  15.                 list.add(3);
  16.                 list.add(12);
  17.                 list.add(11);
  18.                
  19.                 System.out.println("原始的list:"+list);
  20.                 System.out.println("******************************");
  21.                 Collections.reverse(list);
  22.                 int index = Collections.binarySearch(list, 4);
  23.                 System.out.println("反转后list:" + list);
  24.                 System.out.println("反转后index:" + index);
  25.                 System.out.println("******************************");
  26.                 Collections.sort(list);
  27.                 System.out.println("排序后list:" + list);
  28.                 int index1 = Collections.binarySearch(list, 4);
  29.                 System.out.println("排序后index:" + index1);
  30.         }
  31. }
复制代码

作者: 黑马-王鹏    时间: 2013-3-23 23:57
  1. import java.util.*;//ArrayList;
  2. //import java.util.Collections;
  3. //import java.util.List;
  4. public class CollectionsDemo {
  5.         public static void main(String[] args) {
  6.                 // 创建集合对象
  7.                ArrayList<Integer> list = new ArrayList<Integer>();
  8.                 // 添加元素           //List改为ArrayList
  9.                 list.add(3);
  10.                 list.add(4);
  11.                 list.add(5);
  12.                 list.add(6);
  13.                 list.add(7);
  14.                 list.add(8);
  15.                 list.add(9);
  16.                 list.add(11);
  17.                 list.add(12);
  18.                 // Collections.reverse(list);//改哈顺序就对了
  19.                  int index = Collections.binarySearch(list,9);
  20.                  System.out.println("index:" + index);
  21.                 System.out.println("list:" + list);
  22.         }
  23. }
复制代码
注意binarySearch前提:必须要有序




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2