2012-04-11 49 views
2
class Employee implements Comparable{ 
    private String name; 
     private String gender; 

     Employee(String name, String gender) { 
      this.name = name; 
      this.gender = gender; 
     } 

     public String getName() { 
       return name; 
     } 

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

     public String getGender() { 
       return gender; 
     } 

     public void setGender(String gender) { 
       this.gender = gender; 
     } 

     public String toString() { 
      return this.getName() + " : " + this.getGender(); 
     } 

     @Override 
     public int compareTo(Object o) { 
      int gendarComp=this.getGender().compareTo(((Employee)o).getGender()); 
      return (gendarComp!=0?gendarComp:this.name.compareTo(((Employee)o).getName())); 
     } 
    } 

    class EmployeeExec { 
     public static void main(String[] args) { 
      List allEmpls = new ArrayList(); 
      allEmpls.add(new Employee("vijay", "m")); 
      allEmpls.add(new Employee("balaji", "m")); 
      allEmpls.add(new Employee("shaifali", "f")); 
      allEmpls.add(new Employee("archana", "f")); 
      allEmpls.add(new Employee("alala", "m")); 
      allEmpls.add(new Employee("kiran", "f")); 

      sortEmployees(allEmpls); 
     } 

     public static void sortEmployees(List allEmpls) { 
      Collections.sort(allEmpls); 
      System.out.println(allEmpls); 
     } 
    } 

任何人可以幫我理解它是如何工作的嗎?什麼是基礎排序。我保留了一些sysout語句來看,但我真的不明白它是如何被調用的。我知道它使用合併排序。但是如何?請幫幫我。排序在多個領域 - 它的工作,但不能理解它是如何工作的。

-Balaji

回答

2

分選是基於compareTo的返回值(略微重新格式化爲可讀性):

@Override 
public int compareTo(Object o) { 
    int gendarComp = this.getGender().compareTo(((Employee)o).getGender()); 
    return (gendarComp != 0 
       ? gendarComp 
       : this.name.compareTo(((Employee)o).getName()) 
      ); 
} 

的邏輯是顯然比較的getGender()值,除非他們測試返回該比較等於。如果它們相等,則返回比較名稱的結果。

順便說一句:如果這是你的代碼,最好使用泛型而不是原始類型。聲明

class Employee implements Comparable<Employee> {... 

然後與簽名聲明compareTo方法:

@Override 
public int compareTo(Employee o) {... 

,你可以在方法內部石膏分配(以及提高客戶端的代碼類型安全)。

1
@Override 
public int compareTo(Object o) { 
    int gendarComp=this.getGender().compareTo(((Employee)o).getGender()); 
    return (gendarComp!=0 ? 
          gendarComp 
          : this.name.compareTo(((Employee)o).getName())); 
} 

如您所見,代碼首先比較性別。

如果性別相同,則生成的整數將爲0,然後按名稱作爲次要排序鍵進行比較。

0

兩個人已經解釋的compareTo()方法做什麼,但是既然你說

,但我不真正瞭解它是如何獲取調用

我會解釋的那部分。當調用Collections.sort(allEmpls)時,所有列表對象的compareTo()方法都會相互調用,因爲它們都實現了Comparable接口。 sort()方法內的代碼根據其compareTo()值對對象進行重新組織。這就是它(當然,過於簡化,但它回答了你的問題)。

相關問題