黑马程序员技术交流社区
标题:
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
原因楼上已经说了,就是使用二分法之前数组要有序,代码给你修改了一个,运行看看对比就清楚了.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Demo {
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);
System.out.println("原始的list:"+list);
System.out.println("******************************");
Collections.reverse(list);
int index = Collections.binarySearch(list, 4);
System.out.println("反转后list:" + list);
System.out.println("反转后index:" + index);
System.out.println("******************************");
Collections.sort(list);
System.out.println("排序后list:" + list);
int index1 = Collections.binarySearch(list, 4);
System.out.println("排序后index:" + index1);
}
}
复制代码
作者:
黑马-王鹏
时间:
2013-3-23 23:57
import java.util.*;//ArrayList;
//import java.util.Collections;
//import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
// 创建集合对象
ArrayList<Integer> list = new ArrayList<Integer>();
// 添加元素 //List改为ArrayList
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
list.add(9);
list.add(11);
list.add(12);
// Collections.reverse(list);//改哈顺序就对了
int index = Collections.binarySearch(list,9);
System.out.println("index:" + index);
System.out.println("list:" + list);
}
}
复制代码
注意binarySearch前提:必须要有序
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2