Java比较器

为什么需要比较器

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

在写代码中:只要是涉及到对象去比较大小/排序 就要使用比较器
Comparable:是要对象所属的类去实现接口。一旦指定,任何位置都可以使用;一劳永逸
Comparator:是调用(排序)方法时,临时想要制定一个比较大小的方法时 临时

实现Comparable接口: 自然排序

重写 compareTo()

//指明这个类比较大小的方式:按照价格从低到高排序,再按照商品名从高到低排序
@Override
public int compareTo(Object o){
	if(o instanceof Goods){
		Goods g = (Goods)o;
		if(this.price<g.price){return -1;}
		else if(this.price>g.price){return 1;}
		else {return this.name.compareTo(g.name)};
	}throw new RuntimeException("传入的数据类型不一致")
}
或者
@Override
public int compareTo(Object o){
	if(o instaceOf Goods){
		Goods g =(Goods)o;
		if(int compare =(Double.compare(this.price,g.price)!=0){return compare;}
		else{return this.name.compareTo(o.name);}
	}throw new RuntimeException("传入的数据类型不一致");
}

实现Comparator接口: 定制排序

重写compare()
//字符串数组中 按照字符串从大到小的顺序排列:
	由于Arrays.sort(arr)这样的排序默认是按照字符串从小到大的顺序排列的,
	String类本身已经重写过compareTo()方法,此时再去重写不合适,所以需要
	new Comparator接口的实现类的对象,并重写compare()方法来实现定制排序
public void test3(){
	String[] arr = new String[]{""xxxxxxxxx};
	Arrays.sort(arr,new Comparator(){
		@Override
		public int compare(Object o1,Object o2){
			if(o1 instanceOf String && o2 instance of String){
				String s1 = (String)o1;
				Stiring s2 = (String)o2;
				return -s1.compareTo(s2);
			}throw new RuntimeException("传入的数据类型不一致");
		}
	})
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章