ArrayList一个循环排序,另一个未排序

时间:2014-01-17 18:32:40

标签: java sorting collections 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);

很抱歉这个简单的问题,我是编程新手。

4 个答案:

答案 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)

  1. 使用调试器来了解计算的每个步骤。
  2. 您只有一个列表。因此,在对它进行排序后,它会被排序。实。
  3. RTFM:http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort%28java.util.List%29 Sort()不返回原始列表的排序副本。它会修改它直到它被排序。