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来实现排序而不必改变对象本身
  • 能够使用多种排序标准,比方升序、降序等。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java新手代码大全_java新手的一串代码「建议收藏」

    java新手代码大全_java新手的一串代码「建议收藏」importjava.util.*;importjava.io.*;abstractclassGood{Stringname;doubleprice;Good(Stringname,doubleprice){this.name=name;this.price=price;}}classBookextendsGood{Stringname;…importjava.util.*;importj…

  • 小米手机解锁BL以及获取Root权限(开发版)

    小米手机解锁BL以及获取Root权限(开发版)已经很久没有刷机了,现在有需要,就再刷一下。想起来自己以前刷机很流畅,现在还得查来查去的。所以就写了以下教程,主要是记录一下自己踩过的一些坑。我刷的手机是小米8,所以以下教程都是小米8为例,其他手机可能还有细微不同之处…….一、解锁BL:这是官方教程,很详细!我就是在教程中,把自己踩过的一些坑给罗列一下,增加一下自己的印象。解锁Bootloader的步骤:解锁前,请将版…

  • GHOSTXPSP3电脑爱好者V9.9美化修正版

    GHOSTXPSP3电脑爱好者V9.9美化修正版全自动无人值守安装,采用万能GHOST技术,安装系统过程只需5-8分钟,适合新旧各种机型。集成DX9.0c最新版、双核补丁。集成常用VB/VC++2005、2008、2010、2012、2013/运行库、万能驱动助理稳定版安装过程会自动删除各分区下可能存在的AUTORUN病毒TcpIP连接数修改为1000;破解Uxtheme.dll可自由添加美化主题。我的文档收藏夹…

  • 腾讯云免费ssl_腾讯云ssl证书申请

    腾讯云免费ssl_腾讯云ssl证书申请1.点此进入SSL证书产品页面2.点击立即选购,进入产品配置界面。3.选择自定义配置–>国际标准–>域名型免费版,点击免费快速申请。4.进入登录界面,用微信扫二维码。5.填写域名相关信息,点击下一步6.选择域名的验证方式,推荐DNS验证,点击下一步。7.打开域名管理后台,根据上一步获得的域名解析信息,增加一条TXT类型的解析记录。8.回到腾讯云SSL证书申请界面,查看域名验证结果,验证成功会收到一条短信,反之会有提示错误。9.申

  • 方便查找规范的搜索引擎_查找免费图像的7个最佳搜索引擎「建议收藏」

    方便查找规范的搜索引擎_查找免费图像的7个最佳搜索引擎「建议收藏」方便查找规范的搜索引擎photocredit:MarkWheadon(cc)照片来源:MarkWheadon(cc)Sincethebirthofthedigitalcamera,therehascertainlyneveranyshortageofphotoimagery.Infact,Yahoo!estimateswe’llta…

  • ProgressDialog总结

    ProgressDialog总结ProgressDialog的使用 ProgressDialog继承自AlertDialog,AlertDialog继承自Dialog,实现DialogInterface接口。 ProgressDialog的创建方式有两种,一种是newDialog,一种是调用Dialog的静态方法Dialog.show()。 //方式一:newDialog finalProgr…

发表回复

您的电子邮箱地址不会被公开。

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