A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 樱木花道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-24 08:17

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

正序浏览
  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前提:必须要有序

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
原因楼上已经说了,就是使用二分法之前数组要有序,代码给你修改了一个,运行看看对比就清楚了.
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
binarySearch为二分搜索法,前提是查找的list是有序的,

在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过 sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马