【问题标题】:How to use Java Arrays.sort如何使用 Java Arrays.sort
【发布时间】:2011-11-06 01:25:22
【问题描述】:

我正在学习 Arrays.sort(...) 在 Java 中的工作原理。

为什么变量:tempdopas都排在唯一排序temp之后?

System.out.println("Before");
for (int i = 0; i < POP; i++)
  System.out.println(dopas[i]+"");           //dopas is unsorted

System.out.println("After");
float[] temp=dopas;
Arrays.sort(temp);                           //sort temp

for (int i = 0; i < POP; i++)
  System.out.println(temp[i]+" "+dopas[i]);  //Both temp and dopas are now sorted

我希望多巴保持未分类。

【问题讨论】:

    标签: java arrays sorting


    【解决方案1】:

    tempdopas 引用同一个数组。

    如果你想让 temp 像一个新数组一样,那么使用 clone() 方法。

    float[] temp = dopas.clone();
    

    clone() 方法创建一个新数组并将多巴的内容复制到新创建的数组中。

    【讨论】:

      【解决方案2】:

      数组是 Java 中的对象,因此在使用数组变量时,您实际上是在使用对数组的引用。

      这样一行

      float[] temp=dopas;
      

      只会将引用复制到数组dopas。之后,dopastemp 指向同一个数组,因此在使用 sort() 后两者都会出现排序。

      使用System.arrayCopyArrays.copyOf 创建数组的副本。

      【讨论】:

        【解决方案3】:

        temp 引用的是 dopas ,所以当 dopas 被排序时,temp 也是如此。它们实际上指向同一个数组。希望这会有所帮助。

        【讨论】:

          【解决方案4】:

          temp 只是对dopas 的引用。实际上内存中只有一个数组。

          如果您希望 temp 成为 dopas 的副本,请尝试:

          float[] temp = Arrays.copyOf(dopas, dopas.length);
          

          这样,你将深拷贝你的数组,而不是浅拷贝它!

          【讨论】:

            【解决方案5】:

            您的任务:float[] temp=dopas; 实际上只是复制对数组的引用。我想你想做的是float[] temp = dopas.clone();

            【讨论】:

              【解决方案6】:

              因为 temp 和 dopas(我们称之为变量)是指向内存空间的指针。通过使用代码

              float[] temp = dopas
              

              您只是说让“temp”指向与 dopas 相同的内存空间。所以结果是你有两个指向内存中相同空间的指针。通过对 temp 进行排序,您可以对该空间的内容进行排序,因此通过稍后在您的代码中引用 dopas,您将访问完全相同的数据。

              PS:Dogmatixed 提到了您的问题的解决方案。

              【讨论】:

                【解决方案7】:

                因为 temp 和 dopas 是对同一个数组的两个引用

                【讨论】:

                  【解决方案8】:

                  dopastemp 指的是同一个数组,可以互换使用。

                  float[] temp=dopas;
                  

                  在这一行之后,temp[i] 将与 dopas[i] 完全相同。

                  【讨论】:

                    【解决方案9】:

                    temp 和 dopas 共享同一个指针,因为您不创建数组的新实例,您只需分配同一个指针。

                    【讨论】:

                      【解决方案10】:

                      因为数组 temp 和 dopas 是相同的。赋值 temp=dopas; 分配对数组的引用。它不会复制其内容。这就是为什么当你对第一个排序时你也对第二个排序。

                      【讨论】:

                        【解决方案11】:

                        为什么在 Array.sort 之后两个数组都排序了?

                        因为只有一个数组。 float[] temp=dopas; 不会创建新数组或复制现有数组内容。它只是复制一个数组reference ...这样您就可以在两个地方引用同一个数组。

                        【讨论】:

                          【解决方案12】:

                          当您将dopas 的值分配给temp 时,它不会进行复制,而是使变量引用同一个数组。

                          【讨论】:

                            【解决方案13】:

                            因为在 Java 中,您按引用访问数组,而不是按值

                            所以tempdopas 都是对同一个数组的引用。

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2020-01-26
                              • 1970-01-01
                              • 2013-03-05
                              • 2012-08-25
                              • 2011-04-30
                              • 1970-01-01
                              • 2020-09-08
                              相关资源
                              最近更新 更多