• 关于Collections的操作方法


    Collections是一个包装类,其中包含有各种有关集合操作的静态多态方,比如可以作用在List和Set上,此类不能实例化。

    排序

    Integer[] array = new Integer[]{3, 10, 4, 0, 2};
    List<Integer> integers = Arrays.asList(array);
    Collections.sort(integers);
    out.println(integers); //[0, 2, 3, 4, 10]
    1
    2
    3
    4
    在这里借用了Arrays的asList方法,该方法可以将数组转成一个List。这里也只能对封装类型Integer数组调用asList方法,如果是int型的数组调用asList会出现其他问题。可以查考Arrays用法总结。

    混排

    out.println(integers); //[0, 2, 3, 4, 10]
    Collections.shuffle(integers);
    out.println(integers); //[0, 3, 10, 2, 4]
    1
    2
    3
    反转

    out.println(integers); //[0, 3, 10, 2, 4]
    Collections.reverse(integers);
    out.println(integers); //[3, 0, 4, 2, 10]
    1
    2
    3
    填充(覆盖)元素

    array = new Integer[]{3, 10, 4, 0, 2};
    integers = Arrays.asList(array);
    Collections.fill(integers, -1);
    out.println(integers); //[-1, -1, -1, -1, -1]
    out.println(Arrays.toString(array)); //[-1, -1, -1, -1, -1]
    1
    2
    3
    4
    5
    通过输出可以发现原数组的值也跟着发生了变化,因为是封装类型,所以Integer[]中和List<Integer>中的元素指向的是用一个Integer对象的地址,所以两个会一起变化。

    替换元素

    array = new Integer[]{3, 10, 4, 4, 4};
    integers = Arrays.asList(array);
    Collections.replaceAll(integers, 4, -4);
    out.println(integers); //[3, 10, -4, -4, -4]
    1
    2
    3
    4
    拷贝List

    out.println(integers); //[3, 10, -4, -4, -4]
    List<Integer> integersCopy = new ArrayList<>(); integersCopy.add(1);
    integersCopy.add(1);
    integersCopy.add(1);
    integersCopy.add(1);
    integersCopy.add(1);
    integersCopy.add(1);
    //如果不对List调用add方法,integerCopy还是空的,下面的copy方法会出错
    Collections.copy(integersCopy, integers);
    out.println(integersCopy); //[3, 10, -4, -4, -4, 1]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    返回List中的最大值,最小值

    array = new Integer[]{3, 10, 4, 0, 2};
    integers = Arrays.asList(array);
    out.println(integers);
    out.println(Collections.min(integers)); //0
    out.println(Collections.max(integers)); //10
    1
    2
    3
    4
    5
    源列表中第一次和最后一次出现指定列表的起始位置

    Integer[] array1 = new Integer[]{3, 10, 4, 0, 2, 4, 0};
    List integers1 = Arrays.asList(array1);
    Integer[] array2 = new Integer[]{4, 0};
    List integers2 = Arrays.asList(array2);
    out.println(Collections.lastIndexOfSubList(integers1, integers2)); //5
    out.println(Collections.indexOfSubList(integers1, integers2)); //2
    1
    2
    3
    4
    5
    6
    循环移动

    out.println(integers); [3, 10, 4, 0, 2]
    Collections.rotate(integers, 1); //[2, 3, 10, 4, 0] 依次右移一位
    out.println(integers);
    Collections.rotate(integers, -2); //[10, 4, 0, 2, 3] 依次左移两位
    out.println(integers);
    1
    2
    3
    4
    5
    二分查找,返回所在的下标。没有找到返回负的下标值。

    array = new Integer[]{0, 2, 4, 10, 20};
    integers = Arrays.asList(array);
    out.println(Collections.binarySearch(integers, 4)); //2
    out.println(Collections.binarySearch(integers, 9)); //-4
    1
    2
    3
    4
    指定元素在集合中出现的次数

    array = new Integer[]{0, 2, 4, 4, 20};
    integers = Arrays.asList(array);
    out.println(Collections.frequency(integers, 4)); //2
    1
    2
    3
    得到对象的n份拷贝

    List<Integer> numbers = new ArrayList<>();
    numbers.add(1);
    List<List<Integer>> lists = Collections.nCopies(3, numbers);
    out.println(lists); //[[1], [1], [1]]
    numbers.add(2);
    out.println(lists); //[[1, 2], [1, 2], [1, 2]]
    1
    2
    3
    4
    5
    6
    Collections.nCopies(n, object)返回一个List对象,该List对象中含有对象object的n份拷贝,然而实际上列表中并没有存储n份拷贝,从中任意取出一个时,得到的是同一个object。

    注:collections是静态方法  无需创建对象,直接collections调用方法就可以!

        问:collections与collection的区别是什么?

         答:collection是操作单列集合的顶层接口,实现类有List与Set

                 collections是对集合的操作类!

    ---------------------

    原文:https://blog.csdn.net/zhzh402/article/details/79672092

  • 相关阅读:
    java中Condition类的详细介绍(详解)
    Semaphore原理以及使用总结
    RocketMQ消息存储原理总结(一)
    Es Bucket聚合(桶聚合)总结
    "元素隐式具有 “any” 类型,因为类型“Shared”没有索引签名"问题解决思路
    有关生产环境tomcat java应用报错Caused by: java.lang.OutOfMemoryError: Java heap space的调研
    docker 实践02
    正睿比赛总结day1
    【水】一个神秘玩意:如何分辨出差别很小的颜色?
    AtCoder Regular Contest 125 比赛记录(vp)
  • 原文地址:https://www.cnblogs.com/gu-bin/p/10008558.html
Copyright © 2020-2023  润新知