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)


相关推荐

  • centos7 网络配置

    centos7 网络配置centos7刚安装,需要做一些配置才能正常上网!1.虚拟网络编辑器配置1)通过VMware菜单栏,依次点击编辑和虚拟网络编辑器2)选中VMnet8,取消勾选使用本地DHCP服务将IP地址分配给虚拟机,查看DHCP确保未启用,点击NAT设置3)查看网关IP,并记住192.168.255.2,用于网络配置文件设置2.修改mac地址如果本虚拟机为克隆机,则需要重新…

  • The promises and challenges of std::async task-based parallelism in C++11 C++11 std::async/future/p…

    The promises and challenges of std::async task-based parallelism in C++11 C++11 std::async/future/p…

  • py爬取图片_Python爬取图片

    py爬取图片_Python爬取图片疲惫的生活里总要有些温柔梦想吧目标URL:http://www.win4000.com/meinvtag4_1.html爬取美桌网某个标签下的美女壁纸,点进详情页可以发现,里面是一组套图一…

  • 关于VMware无法输入许可证密钥的方法

    关于VMware无法输入许可证密钥的方法首先,把电脑里的VMware卸载掉设置—-应用—-找到VMware——修改—-删除VMware不要保留任何配置文件其次,找到你的VMware安装文件,要知道它在哪或者把它放在一个比较好找的地方打开任务管理器—左上角文件—-运行新任务—然后按图片走等待安装完毕后就能正常输入许可证密钥了…

  • ghost备份与还原系统教程 如何备份系统_重装系统如何备份

    ghost备份与还原系统教程 如何备份系统_重装系统如何备份备份系统完成操作系统、驱动程序或所需软件的安装后,可以利用Ghost工具将系统分区“复制”到一个镜像文件中,在系统出现问题时再将镜像文件还原到系统盘即可,还原时所需的时间也只有10分钟左右,既方便又快捷。使用Ghost备份系统的具体操作方法如下:第1步:双击程序图标,使用U盘启动盘进入PE系统,在桌面上双击“GHOST克隆”图标。第2步:单击OK按钮,启动SymantecGhost程序,此时将弹出提示信息框,单击OK按钮。第3步:单击ToIlmage命令,单

  • Linux入门基础教程

    Linux入门基础教程转载自:http://www.centoscn.com/CentOS/2015/0528/5555.html1.1Linux操作系统简介Linux是一套免费使用和自由传播的类Unix操作系统,

发表回复

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

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