java常用类-Comparable,Comparator

java常用类-Comparable,Comparator

说明:Java中对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 <, 但在开发中,需要对多个对象进行排序,言外之意,需要比较对象的大小。
如何实现?使用两个接口中的任何一个:Comparable 或 Comparator

一,Comparable接口的使用:
在这里插入图片描述

在这里插入图片描述自定义类演示:

商品类(Goods.java)
public class Goods implements Comparable {
	private String name;
	private double price;

	public Goods() {}
	public Goods(String name, double price) {
		this.name = name;
		this.price = price;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}
	
	@override
	public String toString() {
		return "Goods{" +
				"name='" + name + '\'' +
				", price=" + price +
				'}';
	}

	@override
	public int compareTo(Object o) {
		if(o instanceof Goods) {
			Goods goods = (Goods)o;
			//方式一:
			if(this.price > goods.price) {
				return 1;
			} else if(this.price < goods.price) {
				return -1;
			} else {
				//价格相同,在按照产品名称
				return this.name.compareTo(goods.name);
			}
			//方式二:
			//return Double.compare(this.price, goods.price);
		}

		throw new RuntimeException("传入的数据类型不一致");
	}
}

测试类(ComparaTest.java)
public class ComparaTest {
	@Test
	public void test2() {
		Goods[] arr = new Goods[4];
		arr[0] = new Goods("lenovoMouse", 34);
		arr[1] = new Goods("dellMouse", 43);
		arr[2] = new Goods("xiaomiMouse", 12);
		arr[3] = new Goods("huaweiMouse", 65);

		Arrays.sort(arr);

		System.out.println(Arrays.toString(arr));
	}
}

在这里插入图片描述


在这里插入图片描述
代码演示:

@Test
public void test3() {
	String[] arr = new String[]{"AA","CC","KK","MM","GG","JJ","DD"};
	Arrays.sort(arr, new Comparator() {
		//按照字符串从大到小排序
		@override
		public int compare(Object o1, Object o2) {
			if(o1 instanceof String && o2 instanceof String) {
				String s1 = (String)o1;
				String s2 = (String)o2;
				return -s1.compareTo(s2);
			}
			throw new RuntimeException("输入的数据类型不一致");
		}
	}
	System.out.println(Arrays.toString(arr));
}

在这里插入图片描述

Comparable接口与Comparator的使用比较:

Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小
Comparator接口属于临时性的比较,一次性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值