JAVA中Comparator的使用

关于Collections中的sort方法的使用

 

在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标。

此排序被保证是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。

举个例子:

定义一个User类,内有name和score两个属性。

定义一个ArryList,其内部元素为User对象,如何按照Userscore进行升序排序?

//声明User类型

public class User {

public String name;

public int score;

public User(String name,int score)

{

this.name =name;

this.score = score;

}

}

//按照User对象的score进行排序,升序排序。需要继承Comparator接口

public class comparator implements Comparator<User>{

public int compare(User u1,User u2)

{

return u1.score - u2.score;

}

};

public class main {

public static void main(String[] args) {

// TODO Auto-generated method stub

ArrayList<User> list = new ArrayList<User>();

list.add(new User("wangqiang",100));

list.add(new User("lizeyang",99));

list.add(new User("linyenan",78));

list.add(new User("yaojianliang",80));

list.add(new User("xinhong",66));

list.add(new User("gaoming",66));

list.add(new User("liupeng",87));

Collections.sort(list,new comparator());

for(User index:list)

{

System.out.println(index.score + index.name);

}

}

}

最后排序结果为:

66gaoming

78linyenan

80yaojianliang

87liupeng

99lizeyang

100wangqiang

另外,如果按照User对象的name属性进行降序排列,那么修改compare类如下:

public class comparator implements Comparator<User>{

public int compare(User u1,User u2)

{

return u2.name.compareTo(u1.name);

}

};

降序结果为:

xinhong66

wangqiang100

lizeyang99

liupeng87

linyenan78

gaoming66

如果元素本身就是可比较的,且升序。那么默认的Collections.sort(Object)就可以实现。

但是如果需要降序的话,那么就得修改compare方法。比如:string对象

时间: 2024-08-03 14:21:05

JAVA中Comparator的使用的相关文章

Java中Comparator接口

Comparator位于java.util包下 public interface Comparator<T> 强行对某个对象 collection 进行整体排序 的比较函数.可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制.还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序. 当且仅当对于一组

跟王老师学集合(十一)java中Comparator的用法

Java中Comparator的用法 主讲人:王少华  QQ群号:483773664 在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package chapter07_11; public class Person {     private int a

java中Comparator的用法 -- 实现集合和数组排序

在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类Step package com.ljq.entity; /** * */public class Step{ /** 时间 */ private String acceptTime = ""; /** 地点 */ private String acceptAddress = ""; public Ste

使用Java中Comparator接口实现自定义排序

一般情况下,自己动手写一个简单排序程序还是没有问题的,但是你能保证写出来的排序程序的时间复杂度吗?你能保证程序的正确性吗,鲁棒性呢,还有程序结构的清晰性,可维护性.......综上所述,学习一下排序接口来实现对复杂对象的排序还是很有必要的.Java中有两个用来实现排序的接口Comparator和Comparable接口,本人比较喜欢使用java的Comparator接口,在程序里实现Comparator接口里的compare(Object o1,Object o2)方法,然后在程序中通过调用Ar

java中Comparator 和 Comparable的区别

1.Comparable的代码如下: public interface Comparable<T> { public int compareTo(T o); } 2.Comparator的代码如下 public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); // jdk1.8 后的方法 default Comparator<T> reversed() { re

Java 中Comparator 的使用,实现集合排序

目标:实现对Person 对象的年龄,从小到大排序 1.实现排序 1 package com.app; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.Comparator; 6 import java.util.List; 7 8 public class A1 extends B{ 9 10 public static void main(String[] args) { 1

Java中Comparator比较器的使用

说几点需要注意的,提醒自己即可: 以下是单独定义一个比较器的类,实现了Comparator中的compare方法.(要在Main方法外面定义类噢) 一定是compare而不是Compare哦 package xixixi; import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt()

Java中Comparator接口和Comparable接口的使用

一般情况下在实现对对象元素的数组或集合进行排序的时候会用到Comparator和Comparable接口,通过在元素所在的类中实现这两个接口中的一个,然后对数组或集合调用Arrays.sort或者Collentions.sort方法即可实现对数组或集合的排序.就sort方法里面的参数来说,实现了不同的接口则传递的参数也不尽相同.对于实现了Comparator接口的类来说,sort方法需要接受的参数不仅包括数组或集合,还要包括实现了该接口的类对象:而对实现了Comparable接口的类来说,参数不

Java中Comparator进行对象排序

Java在8后引入了lambda表达式和流,使得排序方法有了变化 class User { int id; String name; public User(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } @Override public String toString() { re