1.13.集合工具类Collections

一.集合工具类Collections的概述和常用API:

  • addAll方法中第一个形参的数据类型为Collection<T>,意味着第一个参数是针对单列集合->所以addAll方法只能给单列集合Collection批量添加元素,双列集合Map是不行的

  • addAll方法中第二个形参T...elements是可变参数,意味着无论添加多少个元素都可以,元素类型不限

  • shuffle方法的形参List<?> list的数据类型为List< ? >,意味着只能传递List的子类集合即ArrayList集合、LinkedList集合和Vector集合

  • shuffle方法用于打乱List系列集合的元素的顺序,之所以针对List系列集合,是因为List系列集合是有序的,而Set系列集合是无序的,打乱Set系列集合没有任何意义

  • 类Collections属于工具类,因此类Collections的构造方法会被私有化,不让外界创建类Collections的对象,而且工具类大多数方法都被static修饰,因此可以直接类名.方法名进行调用,类Collections同理:


二.集合工具类Collections还有其他的API方法:

  • 第一个sort方法是按照默认规则进行排序

  • 第二个sort方法的排序规则可以自己指定,其中第二个sort方法中的第二个形参Comparator<T> c的数据类型为接口Comparator<T>,使用该接口指定要排序的规则:


三.集合工具类Collections的常用API演示:

1.addAll方法:批量添加元素

package com.itheima.a05myCollections;
​
import java.util.ArrayList;
import java.util.Collections;
​
public class CollectionsDemo1 {
    public static void main(String[] args) {
        //1.创建集合对象
        ArrayList<String> list=new ArrayList<>();
​
        //2.批量添加元素
        Collections.addAll(list,"abc","bcd","qwer","df","asdf","zxcv","1234","qwer");
​
        //3.打印集合
        System.out.println(list);
        //运行结果为[abc, bcd, qwer, df, asdf, zxcv, 1234, qwer]
    }
}

2.shuffle方法:打乱List集合元素的顺序

package com.itheima.a05myCollections;
​
import java.util.ArrayList;
import java.util.Collections;
​
public class CollectionsDemo1 {
    public static void main(String[] args) {
        //1.创建集合对象
        ArrayList<String> list=new ArrayList<>();
​
        //2.批量添加元素
        Collections.addAll(list,"abc","bcd","qwer","df","asdf","zxcv","1234","qwer");
​
        //3.打印集合
        System.out.println(list);
        //运行结果为[abc, bcd, qwer, df, asdf, zxcv, 1234, qwer]
​
        //4.shuffle方法
        Collections.shuffle(list);
​
        //5.打印集合
        System.out.println(list);
        //运行结果为[zxcv, asdf, qwer, qwer, bcd, df, 1234, abc]
        /*相对第一次打印结果,顺序已被打乱,而且每一次打乱的结果都会不一样*/
    }
}

四.集合工具类Collections其他的API方法演示:

1.sort方法1:根据默认的规则进行排序

package com.itheima.a05myCollections;
​
import java.util.ArrayList;
import java.util.Collections;
​
public class CollectionsDemo2 {
    public static void main(String[] args) {
        //默认规则,需要重写Comparable接口的compareTo方法->Integer已经实现,按照从小到大的规则排序
        /*如果是自定义对象,需要自己指定规则*/
        ArrayList<Integer> list=new ArrayList<>();
        Collections.addAll(list,10,1,2,4,8,5,9,6,7,3);
        Collections.sort(list);
        System.out.println(list);
        //运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
}

2.sort方法2:根据指定的规则进行排序,该方法的第二个形参是接口,使用该接口指定要排序的规则

package com.itheima.a05myCollections;
​
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
​
public class CollectionsDemo2 {
    public static void main(String[] args) {
        ArrayList<Integer> list=new ArrayList<>();
        Collections.addAll(list,10,1,2,4,8,5,9,6,7,3);
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                //按照从大到小的顺序排序,返回o1-o2就是按照从小到大的顺序排序
                return o2-o1;
            }
        });
        System.out.println(list);
        //运行结果为[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    }
}

3.binarySearch方法:以二分查找法查找元素,二分查找前必须保证元素有序即升序或降序,要不然查找可能会遗漏

package com.itheima.a05myCollections;
​
import java.util.ArrayList;
import java.util.Collections;
​
public class CollectionsDemo2 {
    public static void main(String[] args) {
        ArrayList<Integer> list=new ArrayList<>();
        //需要元素有序,这样才能进行二分查找
        Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
        System.out.println( Collections.binarySearch(list, 9) ); //运行结果为8,表示元素9在集合list中8索引的位置上
        System.out.println( Collections.binarySearch(list, 1) ); //运行结果为0,表示元素1在集合list中0索引的位置上
        System.out.println( Collections.binarySearch(list, 20) ); //运行结果为-11,小于0,表示元素20不在集合list中
    }
}

4.copy方法:拷贝集合中的元素

  • copy两个参数dest和src的关系:第二个参数src的内容拷贝到第一个参数dest的内容里,最终被拷贝的数据中第一个参数dest的内容会被第二个参数src的内容覆盖,第二个参数src的内容不变

  • copy两个参数都是集合,由于是第二个参数src的内容拷贝到第一个参数dest的内容里,因此第一个参数dest集合的长度必须大于等于第二个参数src集合的长度,否则就会有部分元素拷贝到第一个参数dest集合外

package com.itheima.a05myCollections;
​
import java.util.ArrayList;
import java.util.Collections;
​
public class CollectionsDemo2 {
    public static void main(String[] args) {
        //把list1中的元素拷贝到list2中
        //会覆盖原来的元素
        //注:如果list1的长度 > list2的长度,方法会报错
        ArrayList<Integer> list1=new ArrayList<>();
        ArrayList<Integer> list2=new ArrayList<>();
        Collections.addAll(list1,1,2,3,4,5,6,7,8,9,10);
        Collections.addAll(list2,0,0,0,0,0,0,0,0,0,0);
        Collections.copy(list2,list1);
        System.out.println(list1); //运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        System.out.println(list2); //运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
}
package com.itheima.a05myCollections;
​
import java.util.ArrayList;
import java.util.Collections;
​
public class CollectionsDemo2 {
    public static void main(String[] args) {
        //把list1中的元素拷贝到list2中
        //会覆盖原来的元素
        //注:如果list1的长度 > list2的长度,方法会报错
        ArrayList<Integer> list1=new ArrayList<>();
        ArrayList<Integer> list2=new ArrayList<>();
        Collections.addAll(list1,1,2,3,4,5,6,7,8,9,10);
        Collections.addAll(list2,0,0,0,0,0,0,0,0,0,0,123);
        Collections.copy(list2,list1);
        System.out.println(list1); //运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        System.out.println(list2); //运行结果为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 123]
    }
}

5.fill方法:使用指定的元素填充集合,具体是指用某个元素替换集合中的所有元素

package com.itheima.a05myCollections;
​
import java.util.ArrayList;
import java.util.Collections;
​
public class CollectionsDemo2 {
    public static void main(String[] args) {
        //把集合中现有的所有数据,都修改为指定数据
        ArrayList<Integer> list=new ArrayList<>();
        Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
        Collections.fill(list,100);
        System.out.println(list);
        //运行结果为[100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
    }
}

6.max/min方法:

a.根据默认的自然排序获取最大值/最小值:默认的自然排序就是先按照从小到大的顺序排序(注:String型中默认是按照字母的abcdefg...顺序进行排列的),然后找最大值和最小值
package com.itheima.a05myCollections;

import java.util.ArrayList;
import java.util.Collections;

public class CollectionsDemo2 {
    public static void main(String[] args) {
        //求最大值或者最小值
        ArrayList<Integer> list=new ArrayList<>();
        Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);
        System.out.println( Collections.max(list) ); //运行结果为10
        System.out.println( Collections.min(list) ); //运行结果为1
    }
}
package com.itheima.a05myCollections;

import java.util.ArrayList;
import java.util.Collections;

public class CollectionsDemo2 {
    public static void main(String[] args) {
        //求最大值或者最小值
        ArrayList<Integer> list=new ArrayList<>();
        Collections.addAll(list,1,3,2,4,5,8,7,6,9,10);
        System.out.println( Collections.max(list) ); //运行结果为10
        System.out.println( Collections.min(list) ); //运行结果为1
    }
}
b.自定义排序规则后再找最大值和最小值:
package com.itheima.a05myCollections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class CollectionsDemo2 {
    public static void main(String[] args) {
        //String型中默认是按照字母的abcdefg...顺序进行排列的
        /*现在要求按照字符串的长度进行排列,并且求出长度最长的字符串,
          此时默认的规则无法满足,因此就需要自己指定规则*/
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"a","aa","aaa","aaaa");
        String result = Collections.max(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //o1.length() - o2.length()是一种排序规则
                return o1.length() - o2.length();
            }
        });
        /*o2.length() - o1.length()就不行,这样求出的最大值就是a,
          这里可以在o2.length() - o1.length()和o1.length() - o2.length()之间相互试,
          哪个结果符合要求,就用哪个*/

        //打印
        System.out.println(result); //运行结果为aaaa
    }
}

7.swap方法:交换集合中指定位置的元素

package com.itheima.a05myCollections;

import java.util.ArrayList;
import java.util.Collections;

public class CollectionsDemo2 {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        Collections.addAll(list, 1, 2, 3);
        Collections.swap(list, 0, 2); //这里指的是把list集合中0索引上的元素和2索引上的元素互换内容
        System.out.println(list);
        //运行结果为[3, 2, 1]
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值