Java :Collections类反转集合后,使用检索出现检索值异常

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 方法为二分法查找,二分法查找的前提的集合或数字为有序排列,反转后打乱了原有的有序排列,再用原有二分法进行查找就以上问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值