解決的問(wèn)題:
Java中的對(duì)象禽篱,正常情況下畜伐,只能進(jìn)行比較:==或!=,不能使用>或<
但在實(shí)際開(kāi)發(fā)中躺率,需要對(duì)多個(gè)對(duì)象進(jìn)行排序玛界,比較對(duì)象大小万矾,所以出現(xiàn)了Compareable活Compator
Comparable使用
1、String慎框,包裝類等實(shí)現(xiàn)了Comparable接口勤众,重寫了compareTo()方法,給出了比較兩個(gè)對(duì)象大小的方法
2鲤脏、compareTo()是默認(rèn)從小到大排序的们颜。
3、重寫compareTo(obj)的規(guī)則:
如果當(dāng)前對(duì)象this大于形參obj猎醇,返回正整數(shù)窥突;
如果當(dāng)前對(duì)象this小于形參obj,返回負(fù)整數(shù)硫嘶;
如果當(dāng)前對(duì)象this等于形參obj阻问,返回0;
4沦疾、對(duì)于自定義類來(lái)說(shuō)称近,如果需要排序,可以讓自定義類實(shí)現(xiàn)Comparable接口哮塞,重寫compareTo(obj)方法刨秆,在compareTo(obj)寫想要排序的方法
代碼示例
類:
public class Goodsimplements Comparable{
????private Stringname;
????private double 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;
????}
????public Goods(String name,double price) {
????????this.name = name;
????????this.price = price;
????}
????public Goods() {
????????}
????@Override
? ? public String toString() {
????????return "Goods{" +
????????"name='" +name +'\'' +
????????", price=" +price +
????????'}';
????????}
@Override
? ? //按照價(jià)格從高到低排序,價(jià)格相同忆畅,按名字排序
? ? public int compareTo(Object o) {
????????if(oinstanceof Goods){
????????Goods goods = (Goods)o;
????????//方式1:自己寫
? ? ? ? ? ? if(this.price > goods.price){
????????????????return 1;
????????????}else if(this.price < goods.price){
????????????????return -1;
????????????}else {
????????????????return this.name.compareTo(goods.name);
????}
//方式2:
//? ? ? ? ? ? return Double.compare(this.price, goods.price);
? ? ? ? }
????throw new RuntimeException("傳入的數(shù)據(jù)類型不一致");
????}
}
測(cè)試類:
public class CompareTest {
@Test
? ? public void test1(){
????String[] arr =new String[]{"AA","DD","KK","ZZ","MM","BB","EE","OO"};
????Arrays.sort(arr);
????System.out.println(Arrays.toString(arr));
????}
}