栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA--Comparable和Comparator的用法和区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA--Comparable和Comparator的用法和区别

目录

一、Comparable(内部比较器)

实例:

二、Comparator(外部比较器)

实例:

三、两者区别


一、Comparable(内部比较器)

Comparable接口只包含一个compareTo()方法,该方法可以给两个对象进行排序。

具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。

实例:

1、定义一个Person实体类去实现Comparable接口,并重写compareTo方法,本例比较的是当前Person类,通过age属性进行比较。

public class Person implements Comparable{
	private String name;
	private int age;
	public Person() {

	}
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	@Override
	public int compareTo(Person o) {
		// TODO Auto-generated method stub
		if(this.age > o.age){
			return 1;
		}else if(this.age < o.age){
			return -1;
		}else{
			return 0;
		}
	}

2、定义测试类Test,使用Collections.sort(T t)进行排序。

public static void main(String[] args) {
		ArrayList list=new ArrayList();
		list.add(new Person("小张",23));
		list.add(new Person("小李",24));
		list.add(new Person("小王",21));
//		Collections.shuffle(list);
		Collections.sort(list);//使用该方法进行排序
		System.out.println(list);
	}

二、Comparator(外部比较器)

可以实现自定义比较规则,元素自身提供的比较规则称为自然排序;

compara(o1,o2),如果返回值为0,则为重复元素;

Comparator 接口包含compare ()和equals()两个方法。

使用Comparator比较器,元素类型可不实现Comparable接口,并且优先级高于Comparable接口。

实例:

1、定义一个Person实体类

public class Person {
	private String name;
	private int age;
	public Person() {

	}
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

 2、定义测试类Test

	public static void main(String[] args) {
		Comparator com=new Comparator() {

			@Override
			public int compare(Person o1, Person o2) {
				// TODO Auto-generated method stub
				return o1.getAge()-o2.getAge();
			}
		};
		ArrayList list=new ArrayList();
		list.add(new Person("小张",21));
		list.add(new Person("小李",32));
		list.add(new Person("小王",11));
		Collections.sort(list, com);
		System.out.println(list);
	}

三、两者区别

1、接口都可以用来实现集合中元素的比较、排序,Comparator位于包java.util下,而Comparable位于包java.lang下;

2、实现comparable 必须重写compareTo(T o),实现comparator必须重写compare(T o1,T o2);

3、Comparator与Comparable同时存在的情况下,比较器Comparator优先级高。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727899.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号