2014-01-17 36 views
-1

對於此作業,我需要排序一個列表並保留原始列表,但是當我單擊按鈕兩次時,原始列表也會被排序。ArrayList一個循環排序,另一個未排序

 String output = ""; 
    String sortedOutput = ""; 

    //ORIGINAL OUTPUT 
    for (int j = 0; j < song.size(); j++){ 
     output += song.get(j) + "\n"; 
    } 

    //SORTED OUTPUT 
    for (int k = 0; k < song.size(); k++){ 
     Collections.sort(song); 
     sortedOutput += song.get(k) + "\n"; 

    } 

    titleArtistOutput.setText("Original Order\n" + output + "\nSorted Order\n" + sortedOutput); 

有什麼我可以放在第一個循環,以防止它被排序?

編輯:

謝謝Jon Skeet!

我又ArrayList的

String output = ""; 
String sortedOutput = ""; 

List <String> sortedSongs = new ArrayList <String> (song); 

for (int j = 0; j < song.size(); j++){ 
    output += song.get(j) + "\n"; 
} 

for (int k = 0; k < song.size(); k++){ 
    Collections.sort(sortedSongs); 
    sortedOutput += sortedSongs.get(k) + "\n"; 

} 

titleArtistOutput.setText("Original Order\n" + output + "\nSorted Order\n" + sortedOutput); 

對不起,我簡單的問題,我是新來編程。

+3

每次迭代對列表進行排序有什麼意義?只分類一次。 –

+0

您似乎只有一個列表... –

+0

建議您查看http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#sort的javadocs( java.util.List)如果你需要,你需要保留兩個列表,你知道,兩個列表。 – Taylor

回答

4

我懷疑你只是想借此列表的副本,然後那種:

List<Song> sortedSongs = new ArrayList<Song>(song); 
Collections.sort(sortedSongs); // Will not affect song 

注意,這之前你的循環來完成,而不是在它裏面。

0

因爲當你第二次點擊時,列表已經從第一次進程中排序。像下面這樣做,在這裏我拿了'songDuplicate'列表,其排序不影響原始列表。

String output = ""; 
String sortedOutput = ""; 

//ORIGINAL OUTPUT 
for (int j = 0; j < song.size(); j++){ 
    output += song.get(j) + "\n"; 
} 
ArrayList<String> songDuplicate = new ArrayList<String>(); 
//SORTED OUTPUT 
for (int k = 0; k < songDuplicate.size(); k++){ 
    Collections.sort(songDuplicate); 
    sortedOutput += songDuplicate.get(k) + "\n"; 

} 

titleArtistOutput.setText("Original Order\n" + output + "\nSorted Order\n" + sortedOutput); 
0

您需要複製原始列表。 也許您可以在創建原始列表的輸出時創建副本。

String output = ""; 
    String sortedOutput = ""; 
    List sorted = new ArrayList(); 

    //ORIGINAL OUTPUT 
    for (int j = 0; j < song.size(); j++){ 
     output += song.get(j) + "\n"; 
     sorted.add(song.get(j)); 
    } 

    Collections.sort(sorted); 

    //SORTED OUTPUT 
    for (int k = 0; k < sorted.size(); k++){ 
     sortedOutput += sorted.get(k) + "\n"; 

    } 

    titleArtistOutput.setText("Original Order\n" + output + "\nSorted Order\n" + sortedOutput);