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("傳入的數據類型不一致");
		}
	})
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章