Java Error(六)

Collection Sort 、binarySearch Warning :

import java.util.*;

public class ListInterface2 {
    public static void main(String []args){
        List L1 = new LinkedList();
        List L2 = new LinkedList();

        for(int i=0; i<=10; i++) {
            L2.add("b" + i);
        }

        for(int i=0; i<=9; i++) {
            L1.add("a" + i);
        }

        System.out.println(L2);
        System.out.println(L1);
        Collections.shuffle(L1);
        System.out.println(L1);
        Collections.reverse(L1);
        System.out.println(L1);
        Collections.sort(L1);
        System.out.println(L1);
        Collections.reverse(L1);
        Collections.copy(L2,L1);
        System.out.println(L2);
        System.out.println(L1);
        System.out.println(Collections.binarySearch(L1,"a3"));
    }
}

运行结果显示:

[b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10]
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
[a5, a1, a2, a9, a7, a8, a4, a6, a0, a3]
[a3, a0, a6, a4, a8, a7, a9, a2, a1, a5]
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
[a9, a8, a7, a6, a5, a4, a3, a2, a1, a0, b10]
[a9, a8, a7, a6, a5, a4, a3, a2, a1, a0]
-1

除去最后一项,结果与预期不同。其他一致。若要正确得出elem的index值,将代码进行如下修改。

import java.util.*;

public class ListInterface2 {
    public static void main(String []args){
        List L1 = new LinkedList();
        List L2 = new LinkedList();

        for(int i=0; i<=10; i++) {
            L2.add("b" + i);
        }

        for(int i=0; i<=9; i++) {
            L1.add("a" + i);
        }

        System.out.println(L2);
        System.out.println(L1);
        Collections.shuffle(L1);
        System.out.println(L1);
        Collections.reverse(L1);
        System.out.println(L1);
        Collections.sort(L1);
        System.out.println(L1);
        //Collections.reverse(L1);
        Collections.copy(L2,L1);
        System.out.println(L2);
        System.out.println(L1);
        System.out.println(Collections.binarySearch(L1,"a3"));
    }
}

[b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10]
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
[a5, a6, a1, a0, a9, a7, a8, a2, a4, a3]
[a3, a4, a2, a8, a7, a9, a0, a1, a6, a5]
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b10]
[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
3

出错原因,对List Interface 的中对象,进行查找,需要首先进行排序。查找基于排序 !

且只能用Collectin.Sort();  用Collection. reverse();会出现index为负数的情况。(具体原因,尚且未知,还请指点。:) )

参考部分回答:

如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引,如果列表中的所有元素都小于指定的键,则为 list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。

参考于:https://zhidao.baidu.com/question/13681318.html  

个人理解,Sort()方法按正序排列,binarySearch才可以正常找到elem的index值,但是采用reverse(),会使binarySearch()找不到对应elem,故index值出错。但是具体内存分布和出现的原因,还请知道的人至指点。谢谢 :)

原文地址:https://www.cnblogs.com/leafh/p/8732915.html

时间: 2024-10-14 10:57:09

Java Error(六)的相关文章

Java解惑六:库之谜

本文是根据JAVA解惑这本书,做的笔记. 电子书见:http://download.csdn.net/detail/u010378705/7527721 谜题56 BigInteger.BigDecimal以及包装类型的实例是不可改变. BigInteger five = new BigInteger("5"); BigInteger total = BigInteger.ZERO; total.add(five); //这并不会改变total的值,调用该方法的返回值,才是加法得到的结

【JAVA】六 JAVA Map 一 HashMap

[JAVA]六 JAVA Map 一 HashMap JDK API java.util Interface Map Type Parameters: K - the type of keys maintained by this map V - the type of mapped values All Known Subinterfaces: Bindings, ConcurrentMap<K,V>, ConcurrentNavigableMap<K,V>, LogicalMe

Scala Java Error: value filter is not a member of *

错误字符串 Scala Java Error: value filter is not a member of * 解决办法 在代码中引入下面名字空间 import collection.JavaConversions._

“全栈2019”Java第六十章:如何定义接口

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十章:如何定义接口 下一章 "全栈2019"Java第六十一章:如何实现接口? 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全

“全栈2019”Java第六十一章:如何实现接口?

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十一章:如何实现接口? 下一章 "全栈2019"Java第六十二章:接口与常量详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组".

“全栈2019”Java第六十三章:接口与抽象方法详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十三章:接口与抽象方法详解 下一章 "全栈2019"Java第六十四章:接口与静态方法详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&qu

“全栈2019”Java第六十四章:接口与静态方法详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第六十四章:接口与静态方法详解 下一章 "全栈2019"Java第六十五章:接口与默认方法详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&qu

Java数组六

1.了解如何利用二维数组和循环语句绘制五子棋盘 答:  定义一个二维数组来充当棋盘,定义棋盘大小,初始化棋盘数组,利用for循环使每一个元素赋为"+",然后输出每个数组元素,每打印完一行后在进行换行. import java.io.*; public class QiPan { //定义一个二维数组来充当棋盘 private String[][] board; //定义棋盘的大小 private static int BOARD_SIZE = 15; public void initB

java第六周学习总结

学号20145336 <Java程序设计>第五周学习总结 教材学习内容总结 第十章 输入与输出 InputStream与OutputStream java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象.从程序角度来看,如果将数据从来源中取出,可以使用输入串流,如果将数据写入目的地可以使用输出串流.在java中,输入串流对象为java.io.InputStream实例,输出串流对象为java.io.OutputStream实例.流(Stream)是对「输入输出」的抽象,注意「