栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java集合框架:List排序,compareTo,compare使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java集合框架:List排序,compareTo,compare使用

comparable 和 Comparator 的区别

comparable 接⼝实际上是出⾃java.lang 包 它有⼀个 compareTo(Object obj) ⽅法⽤来排序comparator 接⼝实际上是出⾃ java.util 包它有⼀个compare(Object obj1, Objectobj2) ⽅法⽤来排序。

⼀般我们需要对⼀个集合使⽤⾃定义排序时,我们就要重写compareTo() ⽅法或compare() ⽅法,
当我们需要对某⼀个集合实现两种排序⽅式,⽐如⼀个 学生对象A中的成绩a要按照大小排序的话,我们可以重写compareTo() ⽅法和使⽤⾃制的Comparator ⽅法或者以两个 Comparator来实现歌名排序和歌星名排序,第⼆种代表我们只能使⽤两个参数版Collections.sort() .

compareTo

compareTo是Comparable接口的方法

public interface Comparable {
    public int compareTo(T o);
}

compareTo方法用于比较两个对象的大小,一般写法

    @Override
    public int compareTo(A o) {
        if (o.a==this.a) {
            return 0;
        }else {
            return o.a>a?-1:1;
        }
    }
用途1:比较

如a.compareTO(b),a小于b返回-1,等于返回0,大于返回1。

用途2:排序
public class A implements Comparable{
    int a ;
    public A(int a  ){
        this.a= a;
    }
    @Override
    public int compareTo(A o) {
        if (o.a==this.a) {
            return 0;
        }else {
            return o.a>a?-1:1;
        }
    }

    @Override
    public String toString() {
        return "A{" +
                "a=" + a +
                '}';
    }
    public static void main(String[] args) {
        linkedList as = new linkedList<>();
        as.add( new A(2546));
        as.add( new A(8762));
        as.add( new A(2324));
        as.add( new A(3242));
        as.add( new A(3242));
        as.add( new A(322));
        as.add( new A(4322));
        as.add( new A(6782));
        System.out.println("排序前:");
        as.forEach(System.out::println);
        Collections.sort(as);
        System.out.println("排序后:");
        as.forEach(System.out::println);

    }
}
排序前:
A{a=2546}
A{a=8762}
A{a=2324}
A{a=3242}
A{a=3242}
A{a=322}
A{a=4322}
A{a=6782}
排序后:
A{a=322}
A{a=2324}
A{a=2546}
A{a=3242}
A{a=3242}
A{a=4322}
A{a=6782}
A{a=8762}

Process finished with exit code 0
compare

compare是Comparator的接口

public interface Comparator {
    int compare(T o1, T o2);
}

compare是Comparator的方法,用于集合的排序,但是用的时候需要实现compare方法

下面这种写法是lambda表达式方法,还可以用一个类实现接口的方法来实现

public class B{
    int a;
    public B(int a){
        this.a = a;
    }

    @Override
    public String toString() {
        return "B{" +
                "a=" + a +
                '}';
    }

    public static void main(String[] args) {
        linkedList bs = new linkedList<>();
        bs.add( new B(3333));
        bs.add( new B(2222));
        bs.add( new B(1111));
        bs.add( new B(4444));
        System.out.println("排序前:");
        bs.sort((s1, s2) -> s1.a > s2.a ? 1 :-1 );
        System.out.println("排序后:");
        bs.forEach(System.out::println);
    }
}
排序前:
B{a=3333}
B{a=2222}
B{a=1111}
B{a=4444}
排序后:
B{a=1111}
B{a=2222}
B{a=3333}
B{a=4444}

Process finished with exit code 0

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351943.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号