Java集合框架:List排序,compareTo,compare使用 |
您所在的位置:网站首页 › set集合排序方法 › 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() . compareTocompareTo是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 comparecompare是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 |