Java 排序Comparator的实践
Java 排序Comparator的实践
刘付kin 发表于1年前
Java 排序Comparator的实践
  • 发表于 1年前
  • 阅读 4
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

一般都是对自定义类的排序才需要进行排序规则的定义,因为普通的数据类型,比如说:int 、String、long等都已经实现了implements Comparator<T>接口,这个接口里面就两个抽象方法:compare() 和 equals(),而equals在object中定义的,所以所有类都会实现了这个方法,因而就只需要实现compare()即可。

1:展示代码如下

public class User implements  Comparator<User>{

	public String name;
	
	public int age;
	
	public String addr;
	
	public String sortType;
	
	[@Override](https://my.oschina.net/u/1162528)
	public int compare(User o1, User o2) {
		// TODO Auto-generated method stub
		if("UP".equals(sortType)){//升序
			return o1.age - o2.age;
		}else if("DOWN".equals(sortType)){//降序
			return o2.age - o1.age;
		}else{                    //默认为升序
			return o1.age - o2.age;
		}
	}
}

2:使用

public class UserCompareTest {

	public static void main(String[] args) {
		User user = new User();
		user.age = 11;
		
		User user1 = new User();
		user.age = 5;
		
		User user2 = new User();
		user.age = 8;
		
		User user3 = new User();
		user.age = 3;
		
		
		List<User> users = new ArrayList<User>();
		users.add(user);
		users.add(user1);
		users.add(user2);
		users.add(user3);
		
		System.out.println(users);
		
		Collections.sort(users, new User());
		
		System.out.println(users);
	}
}

3:另一种比较经典的匿名类方式,就是如果很少对这个对象列表进行排序的话,那么这个类就不用实现implements Comparator<T>接口,可以在需要排序的时候,在调用方使用Comparator<T>接口的匿名类对象形式来对这个类进行排序

代码如下:

public class User{
	//实体类什么都不用管,排序规则由需要排序的时候使用Comparator<T>接口的匿名类对象来处理。

	public String name;
	
	public int age;
	
	public String addr;
	
	public String sortType;
}

调用:

public static void main(String[] args) {
	User user = new User();
	user.age = 11;
	
	User user1 = new User();
	user1.age = 5;
	
	User user2 = new User();
	user2.age = 8;
	
	User user3 = new User();
	user3.age = 3;
	
	
	List<User> users = new ArrayList<User>();
	users.add(user);
	users.add(user1);
	users.add(user2);
	users.add(user3);
	
	System.out.println(users);
	
	Collections.sort(users,new Comparator<User>() {
		//匿名类对象的形式
		[@Override](https://my.oschina.net/u/1162528)
		public int compare(User o1, User o2) {
			// TODO Auto-generated method stub
			return o1.age - o2.age;
		}
	});
	
	System.out.println(users);
}

}

#总结:

使用sort方法排序的方式就这两种,如果是自己定义的对象,那么就需要自己定义排序规则,但是如果是系统提供的那些基本数据类型,比如string、int、long等,由于已经实现了这个comparetor<T>接口所以就不需要进行规则的定义

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 6
博文 100
码字总数 72832
×
刘付kin
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: