继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

List集合序列排序的两种方法

xiaoxin3839519
关注TA
已关注
手记 23
粉丝 9
获赞 227

首先讲一下Comparable接口和Comparator接口,以及他们之间的差异。有助于Collections.sort()方法的使用

Comparable & Comparator
接口都可以用来实现集合中元素的比较、排序,Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。
像Integer、String等这些基本类型的JAVA封装类都已经实现了Comparable接口,这些类对象本身就支持自比较,直接调用Collections.sort()就可以对集合中元素的排序,无需自己去实现Comparable接口。
而有些自定义类的List序列,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较,也就是指定使用Comparator(临时规则排序,也称作专门规则排序),如果不指定Comparator,那么就用自然规则排序,这里的自然顺序就是实现Comparable接口设定的排序方式。

以泛型为<Student>的List序列演示两种排序规则
1.Comparable自然规则排序
//在自定义类Student里面实现Comparable接口,并重写抽象方法compareTo(Student o),
//Collections.sort(集合);

package Test;
import java.util.Comparator;

public class Student implements Comparable<Student>{
    public String name;
    public Student(String name){ 
        this.name=name;
    }
    @Override
    public int compareTo(Student o) {
        return this.name.compareTo(o.name);
    }
}
package Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class CollectionTest {
    Student stu=new Student();
    public void test(){
        List<Student> list=new ArrayList<Student>();
        Student students[]={new Student("Tom"),new Student("Jack"),new Student("Mick")};
        list.addAll(Arrays.asList(students));
        for(Student stu:list){
            System.out.println(stu.name);
        }

        System.out.println("排序后的顺序:");
        Collections.sort(list);
        for(Student stu:list){
            System.out.println(stu.name);
        }
    }
    public static void main(String[] args) {
        CollectionTest ct=new CollectionTest();
        ct.test();
    }

}

运行结果:
图片描述

2.Comparator专门规则排序(l临时排序)
//新建一个实现了Comparator接口的类,并重写抽象方法compare(Student o1, Student o2)
//Collections.sort(集合,实现了Comparator接口的类的实例化对象);

package Test;
import java.util.Comparator;

public class Student{
    public String name;
    public Student(String name){ 
        this.name=name;
    }
    public Student() {
    }

}
package Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class CollectionTest {
    Student stu=new Student();
    public void test(){
        List<Student> list=new ArrayList<Student>();
        Student students[]={new Student("Tom"),new Student("Jack"),new Student("Mick")};
        list.addAll(Arrays.asList(students));
        for(Student stu:list){
            System.out.println(stu.name);
        }

        System.out.println("排序后的顺序:");
        Collections.sort(list,new ComparatorTest());
        for(Student stu:list){
            System.out.println(stu.name);
        }
    }
    public static void main(String[] args) {
        CollectionTest ct=new CollectionTest();
        ct.test();
    }

}
package Test;
import java.util.Comparator;

public class ComparatorTest implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        // TODO Auto-generated method stub
        return o1.name.compareTo(o2.name);
    }

}

运行结果:
图片描述

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP