Collections类反转集合后,使用检索出现检索值异常
本着试着测试的原理,在使用Collections 对集合进行反转,再对反转后的集合进行检索,发现如下问题:
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class CollectionsDemo04{
public static void main(String[] args){
List<String> allList = new ArrayList<String>();//使用子类实例化List
Collections.addAll(allList,"A","B"); //使用Collections中方法对集合添加元素
Collections.addAll(allList,"C","D");
System.out.println("反转之前:" + allList); //反转之前输出allList
//检索各个元素
int point = Collections.binarySearch(allList,"A");
System.out.println("检索字母“A”的结果为: " + point);
point = Collections.binarySearch(allList,"B");
System.out.println("检索字母“B”的结果为: " + point);
point = Collections.binarySearch(allList,"C");
System.out.println("检索字母“C”的结果为: " + point);
point = Collections.binarySearch(allList,"D");
System.out.println("检索字母“D”的结果为: " + point);
point = Collections.binarySearch(allList,"E");
System.out.println("检索字母“E”的结果为: " + point);
System.out.println("-------反转之后--------");
Collections.reverse(allList); //反转
System.out.println("反转之后:" + allList);//反转后输出
//检索各个元素
System.out.println("检索字母“A”的结果为: " + point);
point = Collections.binarySearch(allList,"B");
System.out.println("检索字母“B”的结果为: " + point);
point = Collections.binarySearch(allList,"C");
System.out.println("检索字母“C”的结果为: " + point);
point = Collections.binarySearch(allList,"D");
System.out.println("检索字母“D”的结果为: " + point);
point = Collections.binarySearch(allList,"E");
System.out.println("检索字母“E”的结果为: " + point);
}
}
输出结果如下:
可以看到,通过Conlections类对集合进行反转后,检索zhi值出现问题,
理论上
检索字母“A”的结果为:3 而实际为 -5
检索字母“B”的结果为:2 而实际为 -1
检索字母“C”的结果为:1 而实际为 1 一致
检索字母“D”的结果为:0 而实际为 -5
检索字母“E”的结果为:-5 实际为 -5 一致
原因暂不确定,仅记录此次遇到的问题,希望能有大神给出解答。
同时平行展开,今后遇到各种反转问题时,留个心眼,暂时不对其他反转情况进行补充,后续遇到后再做更新。
+++++++++++++++++++++++++++++++++++++++++++++++++++
更新:
原因已经找到,Collections.binarySearch 方法为二分法查找,二分法查找的前提的集合或数字为有序排列,反转后打乱了原有的有序排列,再用原有二分法进行查找就以上问题。