java第十九天,Collections集合工具类的使用

Collections

Java中集合都实现了Collection接口,那么针对集合一些特定的功能,有没有一个接口或类能够统一的集成一些集合必要的功能呢?当然能。它就是——Collections集合工具类。

一.常用方法

它内部方法很有多种,我们常用到的有如下四种方法:

1 批量添加成员到集合

public static <T> boolean addAll(Collection<? super T> c,T...elements)

将所有指定元素添加到指定 collection 中。

注:从方法参数中我们可以看出,它支持泛型参数。第一个参数可以是指定泛型及其父类,第二个参数是指定泛型的元素数组

2 打乱集合中元素顺序

public static void shuffle(List<?> list)

使用默认随机源对指定列表进行置换。

public static void shuffle(List<?> list,Random random)

使用指定的随机源对指定列表进行置换。

注:从方法参数中可以得知,该函数支持单参数和双参数;其中第二个参数是用来设置随机打乱规则的。

3 对集合进行排序

方法(1):

public static <T extends Comparable<? super T>> void sort(List<T> list)

根据元素的自然顺序 对指定列表按升序进行排序。

注意:如果利用此方法对自定义类的集合进行排序,需要在自定义类中继承

Comparable<T> 接口

并且重写

public int compareTo(O o) 方法

决定使用类中哪个参数为排序标准,则用哪个参数进行当前对象和参数对象的对比,比如利用对象中的data属性作为比较参考:

this.data - o.data ===> 升序

o.data - this.data ===> 降序

方法(2):

public static <T extends Comparable<? super T>> void sort(List<T> list, Comparator<? super T> c)

根据指定比较器产生的顺序对指定列表进行排序。

注意:如果利用此方法对自定义类进行排序,需要在第二个参数传入

Comparator 接口的实现类对象

依据此对象设定的规则排序。

4.代码:

Person类代码:

package com.lanyue.day18;

public class Person {

    public int age;
    public String name;

    public Person(int age, String name) {
        this.age = age;
        this.name = name;

    }

}

Stu类代码:

package com.lanyue.day18;

public class Stu implements Comparable<Stu> {

    public int age;
    public String name;

    public Stu(int age, String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public int compareTo(Stu o) {

        return this.age - o.age;
    }
}

运行类代码:

package com.lanyue.day18;

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

public class CollectionTool {

    public static void main(String[] args) {

        ArrayList<Stu> listOne = new ArrayList<>();
        Stu[] stus = {new Stu(20,"逍遥"),new Stu(18,"蓝月"),new Stu(25,"天行")};

        Collections.addAll(listOne,stus);
        Collections.sort(listOne);

        Iterator<Stu> itOne = listOne.iterator();
        while(itOne.hasNext()){

            Stu stu = itOne.next();
            System.out.println(stu.age + ":" + stu.name);
        }

        ArrayList<Person> listTwo = new ArrayList<>();
        Person[] peoples = {new Person(30,"小红"),new Person(50,"小李"),new Person(40,"小赵")};
        Collections.addAll(listTwo,peoples);

        Collections.sort(listTwo, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.age - o2.age;
            }
        });

        Iterator<Person> itTwo = listTwo.iterator();
        while(itTwo.hasNext()){

            Person person = itTwo.next();
            System.out.println(person.age + ":" + person.name);
        }

    }
}

程序截图:

posted @ 2019-08-26 15:42  IT蓝月  阅读(103)  评论(0编辑  收藏  举报
Live2D