首页 > 编程语言 > 详细

十三、实现Comparable接口和new Comparator<T>(){ }排序的实现过程

时间:2019-04-03 01:15:40      阅读:1096      评论:0      收藏:0      [点我收藏+]

参考:https://www.cnblogs.com/igoodful/p/9517784.html


 

Collections有两种比较规则方式,第一种是使用自身的比较规则:

该类必须实现Comparable接口并重写comparTo方法。

this可以想象为1,传入对象o想象为2,返回1-2即按升序排序。返回2-1即按降序排序。

1、首先编写一个实现Comparable接口的实体类

 1 package com.abc;
 2 //Comparable接口后面一定要加上需要比较的数据类型
 3 public class Person implements Comparable<Person>{
 4 
 5     private String name;
 6     private int age;
 7     private int salary;
 8 
 9     public Person() {
10     }
11 
12     public Person(String name, int age, int salary) {
13         this.name = name;
14         this.age = age;
15         this.salary = salary;
16     }
17 
18     public String getName() {
19         return name;
20     }
21 
22     public void setName(String name) {
23         this.name = name;
24     }
25 
26     public int getAge() {
27         return age;
28     }
29 
30     public void setAge(int age) {
31         this.age = age;
32     }
33 
34     public int getSalary() {
35         return salary;
36     }
37 
38     public void setSalary(int salary) {
39         this.salary = salary;
40     }
41 
42     @Override
43     public String toString() {
44         return "Person{" +
45                 "name=‘" + name + ‘\‘‘ +
46                 ", age=" + age +
47                 ", salary=" + salary +
48                 ‘}‘;
49     }
50 
51     //自身定义年龄升序
52     @Override
53     public int compareTo(Person o) {
54         return this.age-o.age;
55     }
56 }

 2、编写测试代码

package com.abc;

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

public class PersonTest {

    public static void main(String[] args){
        List<Person> people = new ArrayList<>();
        people.add(new Person("AAA",20,100));
        people.add(new Person("BBB",18,109));
        people.add(new Person("CCC",30,58));

        System.out.println(people);
        Collections.sort(people);
        System.out.println(people);
    }
}

3、运行结果

[Person{name=‘AAA‘, age=20, salary=100}, Person{name=‘BBB‘, age=18, salary=109}, Person{name=‘CCC‘, age=30, salary=58}]
//完成了年龄的升序排列 [Person{name=‘BBB‘, age=18, salary=109}, Person{name=‘AAA‘, age=20, salary=100}, Person{name=‘CCC‘, age=30, salary=58}]

 

 


 

第二个参数为比较器,可以使用它来定义针对集合排序时的比较元素大小的规则。

使用这种方式时,sort方法不要求集合元素必须实现Comparable接口了,因为不会使用元素自身的比较规则

1、编写一个普通的实体类,不需要实现任何接口

package com.abcd;

public class Person{

    private String name;
    private int age;
    private int salary;

    public Person() {
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ", salary=" + salary +
                ‘}‘;
    }

}

2、编写测试代码

package com.abcd;

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

public class PersonTest {
    public static void main(String[] args){
        List<Person> people = new ArrayList<>();
        people.add(new Person("AAA",20,100));
        people.add(new Person("BBB",18,109));
        people.add(new Person("CCC",30,58));

        System.out.println(people);
     //排序规则 salary降序 Collections.sort(people, new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return o2.getSalary()- o1.getSalary(); } }); System.out.println(people); } }

3、运行结果

[Person{name=‘AAA‘, age=20, salary=100}, Person{name=‘BBB‘, age=18, salary=109}, Person{name=‘CCC‘, age=30, salary=58}]
[Person{name=‘BBB‘, age=18, salary=109}, Person{name=‘AAA‘, age=20, salary=100}, Person{name=‘CCC‘, age=30, salary=58}]

  

 

十三、实现Comparable接口和new Comparator<T>(){ }排序的实现过程

原文:https://www.cnblogs.com/mason117/p/10646382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!