对于此分配,我需要对一个列表进行排序并保留原始列表,但是当我单击该按钮两次时,原始列表也会被排序。
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);
很抱歉这个简单的问题,我是编程新手。
答案 0 :(得分:4)
我怀疑你只想拿一份清单,然后排序:
List<Song> sortedSongs = new ArrayList<Song>(song);
Collections.sort(sortedSongs); // Will not affect song
请注意,这应该在循环之前完成,而不是在其中。
答案 1 :(得分: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);
答案 2 :(得分: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);
答案 3 :(得分:0)