2015-12-06 145 views
1

我想創建一個程序,可以按字母順序排列ArrayList的內容。現在,我有我的程序三類...如何按字母順序排列字符串ArrayList?

public class Dog { 
    private String name; 

    public Dog(){ 

    } 

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

    public String getName(){ 
     return this.name; 
    } 
} 

DogList(其中包含類型狗的ArrayList中)

import java.util.ArrayList; 

public class DogList { 

    private ArrayList<Dog> dogList; 

    public DogList(){ 
     DogList = new ArrayList<>(); 
    } 

    public void setSize(int DogSize){ 
     for(int x = 0; x <= DogSize; x++){ 
      DogList.add(new Dog()); 
     } 
    } 

    public ArrayList<Dog> getList(){ 
     return dogList; 
    } 
} 

和最後一堂課,DogSorter,這是試圖訪問DogList ArrayList,然後嘗試按字母順序對該ArrayList的內容進行排序。

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


public class DogSorter { 
    private DogList list = new DogList(); 

    public void sortDogs{ 
     Collections.sort(list); 
    } 

    for(i = 0; i < list.length(); i++) { 
     System.out.println(list.getList().get(i).getName(); 
    } 
} 

我爲長篇帖子道歉。我的問題很簡單:我如何準確地排列ArrayList的內容?我不斷收到一個錯誤,說我試圖用我的「Collections.sort」行比較錯誤的類型。如果有人能幫忙,請告訴我。謝謝。

編輯:要清楚,我想他們通過爲每個對象

+0

順便說一句:爲什麼你張貼的代碼顯然不是你正在使用的代碼?請避免這一點。 – Tom

回答

5

親切按照這個辦法,不使代碼太多的東西,在這裏,我看你有沒有弄亂你的代碼,這讓很難很容易理解。

請按照這種最簡單的方法按排序順序(升序/降序)對Dog Object的列表進行排序。

import java.util.ArrayList; 
import java.util.Collections; 


class Dog implements Comparable<Dog>{ 
    String name; 

    Dog(String name){ 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

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

    @Override 
    public int compareTo(Dog o) { 
     return this.name.compareTo(o.getName()); // dog name sort in ascending order 
     //return o.getName().compareTo(this.name); use this line for dog name sort in descending order 
    } 

    @Override 
    public String toString() { 
     return this.name; 
    } 
} 


public class DogSort { 

    public static void main(String[] args) { 
     ArrayList<Dog> listDog = new ArrayList<Dog>(); 
     listDog.add(new Dog("doggy")); 
     listDog.add(new Dog("aaa")); 
     listDog.add(new Dog("bbb")); 
     System.out.println(listDog); 
     Collections.sort(listDog); 
     System.out.println(listDog); 

    } 

} 
2

您需要實現Comparator接口()存儲的getName字符串按字母順序排序。

2

你使用同樣的名字DogList,爲你的類和變量。更改。

例如:

private ArrayList<Dog> innerList; 
在DogList類

,聲明一種方法

public sort() { 
Collections.sort(innerList); 
} 

和你的狗類必須與

public class Dog implements Comparable { 

public int compareTo(Object _other) 
{ 
// DO the comparaison 
return 1; 
} 

} 
+0

您正在使用原始類型,因爲...? – Tom

2

你可以用比較器來解決這..

我希望這將解決您的問題 - How to sort an ArrayList in Java

+0

你的建議應該如何工作? 'list'既不是一個數組,也不包含它。 – Tom

4

使用

Collections.sort(dogList, new Comparator<Dog>(){ 
    public int compare(Dog d1, Dog d2){ 
     return d1.getName().compareTo(d2.getName()); 
    }  
}); 

這將比較基於比較每個狗。比較器只是比較狗的名字。

2

你可以對它進行排序:

Collections.sort(list); 
+1

對OP沒有幫助,因爲他已經這麼做了...... – Tom

1

要麼實現你的狗類Comparable接口或編寫自定義的比較器,將他們的名字排序狗。