ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Comparator和Comparable的使用

2019-04-24 20:50:10  阅读:338  来源: 互联网

标签:ps Comparable name Comparator age Person2 Person 使用 public


根据 中国大学MOOC java核心技术 陈良育 第十章第六节
整理
https://www.icourse163.org/course/ECNU-1002842004?tid=1206091267
•对象实现 Comparable 接口(需要修改对象类)
– 实现compareTo 方法
• > 返回1,== 返回0 ,< 返回-1
– Arrays 和 Collections 在进行对象 sort 时,自动调用该方法

• 新建 Comparator (适用于对象类不可更改的情况)
– 实现compare 方法
• > 返回1, == 返回0,< 返回-1
– Comparator 比较器将作为参数提交给工具类的 sort 方法

自己写的对象类可以用Comparable,可以直接修改(如下面的Person);别人发过来jar文件等自己修改不了类的用Comparator(如Person2Comparator)。

import java.util.Arrays;

public class Person implements Comparable<Person> {
	String name;
	int age;

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public int compareTo(Person another) {
		int i = 0;
		i = name.compareTo(another.name); // 使用字符串的比较
		if (i == 0) {
			// 如果名字一样,比较年龄, 返回比较年龄结果
			return age - another.age;
		} else {
			return i; // 名字不一样, 返回比较名字的结果.
		}
	}

	public static void main(String... a) {
		Person[] ps = new Person[3];
		ps[0] = new Person("Tom", 20);
		ps[1] = new Person("Mike", 18);
		ps[2] = new Person("Mike", 20);

		Arrays.sort(ps);//sort升序
		for (Person p : ps) {
			System.out.println(p.getName() + "," + p.getAge());
		}
	}
}

Person2假设不可见


public class Person2 {
	private String name;
    private int age;
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}

    public Person2(String name, int age)
    {
    	this.name = name;
    	this.age = age;
    }
}

需要比较Person2,则用Comparator

import java.util.Arrays;
import java.util.Comparator;

public class Person2Comparator  implements Comparator<Person2> {
	public int compare(Person2 one, Person2 another) {
		int i = 0;
		i = one.getName().compareTo(another.getName());
		if (i == 0) {
			// 如果名字一样,比较年龄,返回比较年龄结果
			return one.getAge() - another.getAge();
		} else {
			return i; // 名字不一样, 返回比较名字的结果.
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person2[] ps = new Person2[3];
		ps[0] = new Person2("Tom", 20);
		ps[1] = new Person2("Mike", 18);
		ps[2] = new Person2("Mike", 20);

		Arrays.sort(ps, new Person2Comparator());
		for (Person2 p : ps) {
			System.out.println(p.getName() + "," + p.getAge());
		}
	}
}

标签:ps,Comparable,name,Comparator,age,Person2,Person,使用,public
来源: https://blog.csdn.net/weixin_41677899/article/details/89502316

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有