2013-04-24 90 views
0

我正在爲最後的學習做準備,如果我看了一個來自中期的問題,我錯了,並且誠實地不確定如何去做。現在的問題是:爲ArrayList重寫類--Java

改寫Person類,這樣,如果你有人稱 對象的ArrayList,ArrayList中,你可以使用它的類別排序 方法排序。排序方法應首先按年齡 排序列表,然後按字母順序排列(對於同齡人)。

下面是問題中提供的相同代碼(Person類)。

public class Person { 
    public String name; 
    public int age; 
} 

這是一箇中期問題,所以我不得不手寫代碼。我想知道回答這個問題的有效和正確的方法是什麼。所有的答案或輸入非常感謝。 謝謝。

+0

如何是重複的笑...... – choloboy7 2013-04-24 00:39:29

+1

不,沒有dupliucate.It需要兩個字段 – PSR 2013-04-24 00:40:34

+0

@ choloboy7你想自定義排序的ArrayList對象的財產:) – 2013-04-24 00:42:06

回答

1

使Person類實現Comparable接口並提供CompareTo方法的實現。

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 

public class Person implements Comparable<Person> { 
    public String name; 
    public int age; 

    @Override 
    public int compareTo(Person person) { 
     return new Integer(this.age).compareTo(person.age); 
    } 


    public static void main(String[] args) { 
     Person person = new Person(); 
     person.name = "Kevin"; 
     person.age = 28; 
     Person person2 = new Person(); 
     person2.name="Bob"; 
     person2.age = 40; 
     Person person3 = new Person(); 
     person3.name="Joe"; 
     person3.age = 90; 

     List<Person> people = new ArrayList<Person>(); 
     people.add(person2); 
     people.add(person3); 
     people.add(person); 

     Collections.sort((List<Person>)people); 

     for(Person p:people){ 
      System.out.println(p.name); 
     } 
    } 

} 
2

我想指出@Kevin鮑爾索克斯回答,他的回答各種各樣的年齡上升,不考慮上名字的第二個排序。與此更換的compareTo解決這兩個問題

@Override 
public int compareTo(Person person) 
{ 
    int ageSort = new Integer(person.age).compareTo(this.age); 

    // If the ages aren't the same 
    if(ageSort != 0) 
    { 
     return ageSort; 
    } 

    // otherwise sort on name alphabetically 
    return name.compareTo(person.name); 
}