Java Collection排序的小问题

今儿个复习Java基础的时候发现Collection方法有个小问题,也不知道是什么原因造成的。

流程是这样的:先初始化并赋值好List,然后调用方法sortArrayList方法,发现两种方法的调用顺序有两种不同的结果。

第一种是先调用升序排序sort,再调用降序reserve,结果很完美,结果是预期结果。

先调用sort升序排序 再调用reserve降序排序

但是如果是先调用降序reserve,再调用升序sort,结果就不是预期结果了,可以发现降序排序reserve并没有成功排序,但sort是正常的。

先调用 reserve降序排序 再调用 sort升序排序

今天下午查了很多方法也没找到原因,Rebuild工程、重启电脑啊啥的也都试过了,网上也找过了,没什么头绪。还是先写下来,以后解决了再说吧。我用的Java版本是:

Java版本

IDEA版本是:IntelliJ IDEA 2019.3.3 x64,平台是Win10。

代码贴在最后:


//please use utf-8 code
package collection;


import java.util.*;

public class JavaCollection {

    static List list1 = new ArrayList();
    static List list2 = new ArrayList();
    public static void main(String[] args) {

        initArrayList();

        sortArrayList();

    }

    /*
      * @Author: sin998
      * @Date: 2020/7/18 19:17
      * @param
      * @return: void
      * @throws:
      * @Description: List排序
     */
    public static void sortArrayList(){
        //随机排序
        Collections.shuffle(list2);
        System.out.println("list2随机排序:");
        printfArrayList(list2);
        //降序排序
        Collections.reverse(list2);
        System.out.println("list2降序排序:");
        printfArrayList(list2);
        //升序排序
        Collections.sort(list2);
        System.out.println("list2升序排序:");
        printfArrayList(list2);
    }

    /*
      * @Author: sin998
      * @Date: 2020/7/18 16:44
      * @param
      * @return: void
      * @throws:
      * @Description:初始化数组list1、list2
     */
    public static void initArrayList(){
        for (int i = 0; i < 10; i++) {
            //向list添加一个元素
            list1.add(new Random().nextInt() % 100 );
        }
        //添加所有元素到list2
        list2.addAll(list1);
//        //长度
//        System.out.println("list2长度是:" + list2.size());
//        //删除元素
//        list2.remove(2);
//        list2.remove(3);
//        list2.remove(4);
//        System.out.println("remove后list2长度是:" + list2.size());
        System.out.println("list1、list2已初始化:");
        printfArrayList(list2);
    }

    /*
      * @Author: sin998
      * @Date: 2020/7/18 16:44
      * @param list
      * @return: void
      * @throws:
      * @Description:打印list
     */
    public static void printfArrayList(List list){
        Iterator ite = list.iterator();
        while (ite.hasNext()){
            System.out.print(ite.next() + "\t");
        }
        System.out.println();
    }

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注