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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jdbctype有哪些类型oracle_java type类型

    jdbctype有哪些类型oracle_java type类型java.sql.Types值JavaTypeIBMDB2OracleSybaseSQLInformixIBMContentManagerBIGINTjava.lang.longBIGINTNUMBER(38,0)BIGINTBIGINTINT8DK_CM_BIGINTBINARYbyte[]CHAR…

    2022年10月20日
    1
  • 开始激活成功教程so文件_so文件格式怎么打开

    开始激活成功教程so文件_so文件格式怎么打开第一、利用IDA静态分析native函数1.isEquals函数分析函数指令代码:简单分析指令代码:1>、PUSH{r3-r7,lr}是保存r3,r4,r5,r6,r7,lr的值到内存的栈中;与之对应的是POP{r3-r7,pc}pc:程序寄存器,保留下一条CPU即将执行的指令lr:连接返回寄存器,保留函数返回后,下一条应执行的指令2>、调用strlen,malloc,st

    2022年9月19日
    0
  • docker部署influx_docker容器部署

    docker部署influx_docker容器部署使用docker部署influxdbdocker-compose.yamlversion:”3″services:influxdb:image:influxdb:latestcontainer_name:influxdbenvironment:-INFLUXDB_DB=db0-INFLUXDB_ADMIN_ENABLED=true-INFLUXDB_ADMIN_USER=admin-INF.

    2022年10月19日
    1
  • 京东静态网页设计案例(1)

    京东静态网页设计案例(1)一、准备步骤以京东网页为设计案例,使用HTML和CSS进行设计,首先要在头部&lt;head&gt;文件中加入&lt;link&gt;对CSS文件里加入的两个CSS代码文件进行链接,一个是设置格式的代码,另一个是下载的图标库代码。示例代码如下:&lt;linkrel="stylesheet"href="./css/index.css"/&gt;&lt;linkrel="s…

    2022年9月5日
    2
  • 【mysql 索引】mysql 添加索引

    【mysql 索引】mysql 添加索引主要内容:1、什么是索引2、添加索引sql3、索引所用的算法4、补充下概念5、索引的缺点6、经典案例一、什么是索引?  索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建

    2022年6月2日
    35
  • Mysql数据库外键的使用【重点】

    Mysql数据库外键的使用【重点】Mysql 数据库外键用法

    2025年6月29日
    0

发表回复

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

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