【问题标题】:ArrayList One loop sorted, the other unsortedArrayList 一个循环排序,另一个未排序
【发布时间】:2014-01-17 18:32:40
【问题描述】:

对于这个作业,我需要对一个列表进行排序并保留原始列表,但是当我单击两次按钮时,原始列表也被排序了。

        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);

我可以在第一个循环中添加什么来防止它被排序吗?

编辑:

谢谢乔恩·斯基特!

我又做了一个数组列表

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);

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

【问题讨论】:

  • 每次迭代对列表进行排序有什么意义?只排序一次。
  • 您似乎只有一个列表...
  • 建议您查看 docs.oracle.com/javase/6/docs/api/java/util/… 的 javadocs 如果您需要,您需要保留两个列表,您知道,两个列表。
  • 我同意。在我们看来,您有 1 个且只有 1 个列表。这就是为什么您需要对其进行排序n 次。答案就在我们面前。

标签: java sorting collections arraylist


【解决方案1】:

我怀疑您只是想复制列表,然后对其进行排序:

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

请注意,这应该在循环之前完成,而不是在循环内部。

【讨论】:

    【解决方案2】:

    因为当你第二次点击时,列表已经从第一次的过程中排序了。像下面那样做,这里我采用了'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);
    

    【讨论】:

      【解决方案3】:

      您需要复制原始列表。 当您从原始列表创建输出时,也许您可​​以创建副本。

          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);
      

      【讨论】:

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

        【讨论】:

          猜你喜欢
          • 2020-05-05
          • 2021-11-13
          • 1970-01-01
          • 2015-10-28
          • 2018-07-13
          • 2018-09-06
          • 2019-05-07
          • 1970-01-01
          • 2021-09-04
          相关资源
          最近更新 更多