两种比较接口类实现和总结(包装类compare)笔记

本文详细探讨了接口类的实现方式与包装类的compare方法在实际应用中的区别与联系,通过实例总结了两者在编程中的优缺点及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

public class Try_compartable_tor {
	public static void main(String[] args) {
		Ddog[] lotOfDogs = new Ddog[10];
		for(int i = 0;i < 10 ;i++) {
			if(i % 2 == 0)
				lotOfDogs[i] = new Ddog(i, "HelloKitties"+String.valueOf(i), Double.parseDouble(String.valueOf(1.0+i)));
			else {
				lotOfDogs[i] = new Ddog(i, "HelloKitties"+String.valueOf(i*4), Double.parseDouble(String.valueOf(1.0+i*4)));
			}
		}
		Arrays.sort(lotOfDogs,new AgeCompator());
		for(int i = 0;i < 10 ;i++) {
			System.out.println(lotOfDogs[i].toString());
		}
	}
}

class Ddog implements Comparable<Ddog>{
	private int age;
	private String name;
	private double kilogram;
	
	public Ddog(int age, String name, double kilogram) {
		super();
		this.age = age;
		this.name = name;
		this.kilogram = kilogram;
	}
	
	@Override
	public int compareTo(Ddog o) {
		return this.name.compareTo(o.name);
	}
	
	@Override
	public String toString() {
		return "name : "+name + "      age : "+age +"     kg : "+kilogram;
	}

	public int getAge() {
		return age;
	}

	public String getName() {
		return name;
	}

	public double getKilogram() {
		return kilogram;
	}
	

	
}

class AgeCompator implements Comparator<Ddog>{
	@Override
	public int compare(Ddog o1, Ddog o2) {
		Integer o1age = o1.getAge();
		Integer o2age = o2.getAge();
		return o1age.compareTo(o2age);
		
	}
}

class KgCompator implements Comparator<Ddog>{
	@Override
	public int compare(Ddog o1, Ddog o2) {
		Double o1kg = o1.getKilogram();
		Double o2kg = o2.getKilogram();
		return o1kg.compareTo(o2kg);
	}
}




总结:

比较器:
	1.本类实现Comparable接口,重写compareTo()方法
		
		@Override
		public int compareTo(Ddog o) {
			return this.name.compareTo(o.name);
		}
		
	2.其他类实现Comparator接口,重写 compare()方法
		
		class AgeCompator implements Comparator<Ddog>{
			@Override
			public int compare(Ddog o1, Ddog o2) {
				Integer o1age = o1.getAge();
				Integer o2age = o2.getAge();
				return o1age.compareTo(o2age);
				
			}
		}
	
调用:
	Arrays.sort(lotOfDogs,new AgeCompator());
	Arrays.sort(lotOfDogs);

区别:
	如果只使用一种比较方法,就在本类实现Comparable接口,重写compareTo()方法
	如果要实现多种比较方法,就应该在其他类实现Comparator接口,重写 compare()方法

细节:
	int,double,long 等基本类型的包装类实例 都有compareTo/compare 方法,String实例也是这样
	因此在重写本类 或是 其他类的 compareTo/compare 方法时,可以使用这些包装类实例方法来简化代码
	例如:
		
		class AgeCompator implements Comparator<Ddog>{
			@Override
			public int compare(Ddog o1, Ddog o2) {
				Integer o1age = o1.getAge();
				Integer o2age = o2.getAge();
				return o1age.compareTo(o2age);
				
			}
	
		
		@Override
		public int compareTo(Ddog o) {
			return this.name.compareTo(o.name);
		}

	
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值