android person类_Collections类

1f679fd2d40dcaa1cb0cba0066cbb04f.png

Collections类

注意, 是Collections类不是Collection接口

1. Collections常用功能

java.utils.Collections是集合工具类, 用来对集合进行操作.

常用方法如下 :

  • public static void shuffle(List <?> list): 打乱集合顺序.
  • public static <T> void sort(List<T> list): 将集合中元素按照默认规则排序
  • public static <T> void sort(List<T> list, Comparator<? super T> ):将集合中元素按照指定规则排序.
package drafts.drafts3;

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

public class CollectionsTest {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();

        list.add(100);
        list.add(50);
        list.add(200);
        list.add(300);

        System.out.println(list);
        Collections.shuffle(list);
        System.out.println(list);
        //sort默认升序排序
        Collections.sort(list);
        System.out.println(list);
    }
}

我们的集合按照默认的自然顺序进行了排序, 如果想要指定顺序那该怎么办呢 ?

2. Comparable接口

如果要按指定顺序排序自定义的类, 我们可以用这个类实现Comparable接口, 然后在类中重写compareTo方法.

@Override
    public int compareTo(Student o) {
        //根据年龄进行升序排序。
        return this.getAge() - o.getAge();
    }

this代表本类, 公式:【升序就是我(调用者)减他(参数)】 要根据什么进行排序,就让什么属性相减

//Student类实现Comparable接口

package cn.itcast.demo06_collections;
/*
    现在Student实现了Comparable接口,表示Student对象具备了比较的功能。
 */
public class Student implements Comparable<Student> {
    private String name;
    private int age;

    /*
        compareTo方法可以比较学生对象谁大谁小。
        在调用Collections的sort(List)方法进行排序时,那么系统内部会自动调用compareTo方法比较两个对象谁大谁小。
        如果返回值是正数,表示调用者对象大于参数对象。
        如果返回值是0,表示两个对象相等。
        如果返回值是负数,表示调用者对象小数参数对象。

        在compareTo中定义比较规则
            公式:【升序就是我(调用者)减他(参数)】
            要根据什么进行排序,就让什么属性相减
     */
    @Override
    public int compareTo(Student o) {
        //根据年龄进行升序排序。
        return this.getAge() - o.getAge();
    }
//get set toString方法.
}

3.Comparator接口

在Collections中有一个方法也叫作sort,这个sort可以进行比较器排序

  • static void sort(List list, Comparator c):参数list表示要排序的集合。参数c表示比较器。如果一个类实现了Comparable接口,就表示这个类的对象具备了比较的功能,那么我们就可以使用sort(List)进行排序。
  • 如果类没有实现Comparable接口,就表示该类的对象不具备比较的功能,那么就不可以使用sort(List)进行排序如果对象本身不具备比较的功能, 那么我们可以找一个法官,帮这些对象去比较, 这个法官就是比较器。
  • 如果通过比较器方式比较了对象并排序,那么这个排序方式就是比较器排序。Comparator是一个接口,这个接口表示比较器,如果要用需要使用实现类,这个实现类需要我们自己创建。小结:
  1. 如果类实现了Comparable接口,表示该类的对象具备了比较的功能,那么可以使用Collections.sort(List)直接排序,这个就是自然排序
  2. 如果对象不具备比较的功能,那么我们可以找一个法官帮对象去比较这个法官就是一个比较器。我们可以定义类实现Comparator接口去定义比较器,
  3. 然后调用Collections.sort(List, Comparator),这个就是比较器排序。

// 构造比较器:

package cn.itcast.demo06_collections;

import java.util.Comparator;
/*
    Comparator表示的是比较器,当Rule实现了这个接口,Rule也就变成了比较器。
 */
public class Rule implements Comparator<Person>{
    //当使用Collections.sort(List,Comparator)进行比较器排序时,内部会自动调用compare比较两个对象谁大谁小。
    //如果compare方法返回值是正数,表示第一个对象大于第二个对象
    //如果compare方法返回值是0,表示第一个对象等于第二个对象
    //如果compare方法返回值是负数,表示第一个对象小于第二个对象
    //排序的公式:【升序就是一减二】,根据什么属性进行排序,那么就让什么属性相减

    //重写compare方法
    @Override
    public int compare(Person o1, Person o2) {
        //根据年龄升序排序。
        return o1.getAge() - o2.getAge();
    }
}

//测试类:

package cn.itcast.demo06_collections;

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

/*
    在Collections中有一个方法也叫作sort,这个sort可以进行比较器排序
    static void sort(List list, Comparator c):参数list表示要排序的集合。参数c表示比较器。

    如果一个类实现了Comparable接口,就表示这个类的对象具备了比较的功能,那么我们就可以使用sort(List)进行排序。
    如果类没有实现Comparable接口,就表示该类的对象不具备比较的功能,那么就不可以使用sort(List)进行排序

    如果对象本身不具备比较的功能, 那么我们可以找一个法官,帮这些对象去比较, 这个法官就是比较器。如果通过比较器方式比较了对象并排序,那么
    这个排序方式就是比较器排序。

    Comparator是一个接口,这个接口表示比较器,如果要用需要使用实现类,这个实现类需要我们自己创建。
 */
public class Demo03CollectionsSort {
    public static void main(String[] args) {
        //创建集合用来保存Person
        List<Person> list = new ArrayList<>();
        //添加元素
        list.add(new Person("jack", 20));
        list.add(new Person("rose", 18));
        list.add(new Person("tony", 22));
        //对集合中的元素排序
        Collections.sort(list, new Rule());
        //输出结果
        System.out.println(list);
    }
}

匿名内部类的形式 :

package drafts.drafts4;

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

public class ComparatorTest {
    public static void main(String[] args) {
        //创建四个学生对象, 储存到集合中
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("rose", 18));
        list.add(new Student("jack", 16));
        list.add(new Student("abc", 19));
        list.add(new Student("ma", 40));

        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getAge() - o2.getAge();
            }
        });

        for (Student student : list) {
            System.out.println(student);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值