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

您所在的位置:网站首页 set集合排序方法 Java集合框架:List排序,compareTo,compare使用

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

2023-10-12 16:16| 来源: 网络整理| 查看: 265

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3