有关Collections的方法

1.测试min方法

public static void Testmin(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(2);
        ali.add(3);
        ali.add(4);
        ali.add(5);
        System.out.println(ali);
        System.out.println(Collections.min(ali));

    }

运行如下

[1, 2, 3, 4, 5]
1

 public static void Testmin(){
        ArrayList<String> ali=new ArrayList<>();
        ali.add("aa");
        ali.add("223");
        ali.add("3");
        ali.add("4");
        ali.add("5");
        System.out.println(ali);
        System.out.println(Collections.min(ali));

    }

但是当ArrayList<>元素为String类型时且传入的既有字母和数字测试如下

[aa, 223, 3, 4, 5]
223

public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) {
        Iterator<? extends T> i = coll.iterator();
        T candidate = i.next();

        while (i.hasNext()) {
            T next = i.next();
            if (next.compareTo(candidate) < 0)
                candidate = next;
        }
        return candidate;
    }

以上为Collections.min()方法源码

我们可以知道其比较原理是compareTo()方法

在比较字符串类型时compareTo()方法的原理我在我的博客String及有关字符串操作的补充中有过简述在这里就不多做概述了

2.测试max方法

public static void Tstmax(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(2);
        ali.add(3);
        ali.add(4);
        ali.add(5);
        System.out.println(ali);
        System.out.println(Collections.max(ali));
    }

其原理与min方法大同小异

3.测试reverse方法

public static void Testre(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(2);
        ali.add(3);
        ali.add(4);
        ali.add(5);
        System.out.println(ali);
        Collections.reverse(ali);
        System.out.println(ali);
    }

此方法可以将元素反转

4.测试swap方法

public static void sw(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(2);
        ali.add(3);
        ali.add(4);
        ali.add(5);
        System.out.println(ali);
        Collections.swap(ali,0,1);
        System.out.println(ali);
    }

此方法可以交换两个选定位置下的元素reverse方法也调用了此方法

5.测试sort方法

public static void sort(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(3);
        ali.add(2);
        ali.add(4);
        ali.add(5);
        System.out.println(ali);
        Collections.sort(ali);
        System.out.println(ali);
    }

运行如下

[1, 3, 2, 4, 5]
[1, 2, 3, 4, 5]

即sort方法可以整理元素使元素有序排列

6.测试copy方法

以下为情况1(没有元素复制有元素)

public static void copy(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(3);
        ali.add(2);
        ali.add(4);
        ali.add(5);
        ArrayList<Integer> ali2=new ArrayList<>();
        Collections.copy(ali2,ali);
        System.out.println(ali2);
    }

测试为

Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
    at java.util.Collections.copy(Collections.java:558)
    at Test.copy(Test.java:83)
    at Test.main(Test.java:7)

当被复制的list没有元素时会报错

但是两个list都没有元素时不会

并且只要被复制的list元素少于复制的list元素时都会报错

public static void copy(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(3);
//        ali.add(2);
//        ali.add(4);
//        ali.add(5);
        ArrayList<Integer> ali2=new ArrayList<>();
        ali2.add(6);
        ali2.add(7);
        ali2.add(8);
//        ali2.add(9);
//        ali2.add(10);
        Collections.copy(ali,ali2);
        System.out.println(ali);
    }
 public static void copy(){
        ArrayList<Integer> ali=new ArrayList<>();
//        ali.add(1);
//        ali.add(3);
//        ali.add(2);
//        ali.add(4);
//        ali.add(5);
        ArrayList<Integer> ali2=new ArrayList<>();
//        ali2.add(6);
//        ali2.add(7);
//        ali2.add(8);
//        ali2.add(9);
//        ali2.add(10);
        Collections.copy(ali,ali2);
        System.out.println(ali);
    }

情况2(有相同元素复制有元素)

 public static void copy(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(3);
        ali.add(2);
        ali.add(4);
        ali.add(5);
        ArrayList<Integer> ali2=new ArrayList<>();
        ali2.add(6);
        ali2.add(7);
        ali2.add(8);
        ali2.add(9);
        ali2.add(10);
        Collections.copy(ali2,ali);
        System.out.println(ali2);
    }

测试为

[1, 3, 2, 4, 5]

被复制list原有元素会被覆盖

情况3(有元素复制无元素)

 public static void copy(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(3);
        ali.add(2);
        ali.add(4);
        ali.add(5);
        ArrayList<Integer> ali2=new ArrayList<>();
//        ali2.add(6);
//        ali2.add(7);
//        ali2.add(8);
//        ali2.add(9);
//        ali2.add(10);
        Collections.copy(ali,ali2);
        System.out.println(ali);
    }
}

测试如下

[1, 3, 2, 4, 5]

被复制list原有元素不会发生改变

情况4(多元素复制少元素)

public static void copy(){
        ArrayList<Integer> ali=new ArrayList<>();
        ali.add(1);
        ali.add(3);
        ali.add(2);
        ali.add(4);
        ali.add(5);
        ArrayList<Integer> ali2=new ArrayList<>();
        ali2.add(6);
        ali2.add(7);
        ali2.add(8);
//        ali2.add(9);
//        ali2.add(10);
        System.out.println(ali);
        Collections.copy(ali,ali2);
        System.out.println(ali);
    }

复制的list有多少覆盖多少原有元素后面的不改变

测试如下

[1, 3, 2, 4, 5]
[6, 7, 8, 4, 5]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值