首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java集合中对象排序

Java集合中对象排序

作者头像
全栈程序员站长
发布2022-07-08 17:32:12
发布2022-07-08 17:32:12
1.1K0
举报

大家好,又见面了,我是全栈君。

集合中的对象排序需求还是比較常见的。当然我们能够重写equals方法,循环比較;同一时候Java为我们提供了更易使用的APIs。当须要排序的集合或数组不是单纯的数字型时,通常能够使用Comparator或Comparable。以简单的方式实现对象排序或自己定义排序。

以下通过两个样例分别用Comparable和Comparator实现对User对象中年龄排序。

Comparable接口方式

类自身实现Comparable接口,实现该接口中的compareTo方法。

代码语言:javascript
复制
import java.util.Arrays;public class ComparableUser implements Comparable {	private String id;	private int age;	public ComparableUser(String id, int age) {		this.id = id;		this.age = age;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	public String getId() {		return id;	}	public void setId(String id) {		this.id = id;	}	public int compareTo(Object o) {		return this.age - ((ComparableUser) o).getAge();	}	/**	 * 測试方法	 */	public static void main(String[] args) {		ComparableUser[] users = new ComparableUser[] {				new ComparableUser("u1001", 25),				new ComparableUser("u1002", 20),				new ComparableUser("u1003", 21) };		Arrays.sort(users);		for (int i = 0; i < users.length; i++) {			ComparableUser user = users[i];			System.out.println(user.getId() + " " + user.getAge());		}	}}

Comparator接口方式

新编写一个类,实现Comparator接口,实现接口中的compare方法。

代码语言:javascript
复制
public class User {	private String id;	private int age;	public User(String id, int age) {		this.id = id;		this.age = age;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	public String getId() {		return id;	}	public void setId(String id) {		this.id = id;	}}
代码语言:javascript
复制
import java.util.Arrays;
import java.util.Comparator;
public class UserComparator implements Comparator {

	public int compare(Object arg0, Object arg1) {
		return ((User) arg0).getAge() - ((User) arg1).getAge();
	}

	/**
	 * 測试方法
	 */
	public static void main(String[] args) {
		User[] users = new User[] { new User("u1001", 25),
				new User("u1002", 20), new User("u1003", 21) };
		Arrays.sort(users, new UserComparator());
		for (int i = 0; i < users.length; i++) {
			User user = users[i];
			System.out.println(user.getId() + " " + user.getAge());
		}
	}
}

总结

那么我们选择哪种方式,选择Comparable接口还是Comparator?

假设一个类实现了Comparable接口,则表明这个类的对象之间是能够相互比較的,这个类对象组成的集合就能够直接使用sort方法排序。 而Comparator能够看成一种算法的实现。将算法和数据分离。Comparator也能够在以下两种环境下使用:

  • 设计时没有考虑比較问题而没有实现Comparable。能够通过Comparator来实现排序而不必改变对象本身
  • 能够使用多种排序标准,比方升序、降序等。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116072.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Comparable接口方式
  • Comparator接口方式
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档