为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Java

首先讲一下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);
    }

}

运行结果:
图片描述

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
移动开发工程师
手记
粉丝
9
获赞与收藏
227

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消