Java集合中对象排序

Java集合中对象排序

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

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

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

Comparable接口方式

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

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方法。
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;	}}

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.net/116072.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月26日 下午1:00
下一篇 2022年1月26日 下午2:00


相关推荐

  • 11期 8月期刊自荐

    11期 8月期刊自荐11 期的小伙伴看过来 nbsp nbsp 我们把负责收集自荐的博客写到了 CSDN 里 希望大家在此篇博客的评论里 积极自荐自己的博客 nbsp nbsp 为了提高大家的积极性 我们评选优秀博客的方法升级为大家自荐博客 博客委员会当月负责人进行筛选 nbsp 自荐格式举例 自荐人 李鑫超自荐博客名称

    2026年3月19日
    3
  • 万字详解,Hadoop大数据技术简介及 伪分布式集群搭建快速入门教程

    万字详解,Hadoop大数据技术简介及 伪分布式集群搭建快速入门教程在大学时学习Hadoop大数据技术的时候,安装配置Hadoop框架,发现找的一些资料介绍得不够详细,比如一些路径的变化没有说清楚,这对于初学者来说是不够友好的,所以在这里做个详细总结介绍一下Hadoop框架,以及Ubuntu版本的Hadoop伪分布式的安装配置。

    2022年6月14日
    46
  • 软件工程 — 数据流图的画法

    软件工程 — 数据流图的画法1.数据流图的画法1.1数据流图的概念数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。说明:在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具。此外,设计数据流图时只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能,所以它也是今后进行软件设计的很好的出发点。1.2

    2022年6月16日
    45
  • msiexec 命令使用文档

    msiexec 命令使用文档Windows R Installer V4 5 6001 22159msiexec Option RequiredPara OptionalPara 安装选项 Product msi 安装或配置产品 a Product msi 管理安装 在网络上安装 Product msi Product msi RequiredPara

    2026年3月16日
    2
  • Micrometer 快速入门

    Micrometer 快速入门Micrometer 快速入门 Micrometer 为最流行的监控系统提供了一个简单的仪表客户端外观 允许仪表化 JVM 应用 而无需关心是哪个供应商提供的指标 它的作用和 SLF4J 类似 只不过它关注的不是 Logging 日志 而是 applicationm 应用指标 简而言之 它就是应用监控界的 SLF4J Micrometer 译 千分尺 不妨看看 SLF4J 官网上对于 SLF4J 的说明 SimpleLoggin SLF4J 现在再看 Micromet

    2026年3月17日
    2
  • 分布式锁的使用场景_分布式锁的三种实现的对比

    分布式锁的使用场景_分布式锁的三种实现的对比前言对于锁大家肯定不会陌生,比如synchronized关键字和ReentrantLock可重入锁,一般我们用其在多线程环境中控制对资源的并发访问。但是随着业务的发展,分布式的概念逐渐出现在我们系统中,我们在开发的过程中经常需要进行多个系统之间的交互,于是上面的加锁方法就会失去作用。于是在分布式锁就自然而然的诞生了,接下来我们来聊一聊分布式锁实现的几种方式。分布式锁的使用场景 效率性:使用分布式锁可以避免不同节点重复相同的工作。 正确性:分布式锁可以避免破坏正确性的发生,如

    2025年10月4日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号