当前位置: 首页 > 知识库问答 >
问题:

为什么Arryas.sort方法对所有其他与方法中声明的数组相链接的数组进行排序?Java[重复的]

金旺
2023-03-14

考虑以下事项:

  • array1包含一个列表。
  • int[]unSorted=array1;一个新的初始化数组作为(重复)工作。
  • Arrays.sort(array1);假设只对原始的Arrayarray1进行排序。

问题发生时,我使用排序方法Arrays.sort。它对链接到array1的所有数组进行排序,包括(重复的)!!那是为什么呢?它应该只改变括号内声明的数组!可不是吗?

共有3个答案

法烨烨
2023-03-14

array1实际上不是一个数组:它是对数组的引用。这有点像如果你给某人一张写有你办公室地址的名片,那张名片不是真正的办公室,而是告诉你如何到达办公室的东西。

当您执行int[]unSorted=array1时,您是在复制引用,而不是数组。同样,这就像有人在你的名片上复制信息。

当您对unSorted执行操作(例如移动其元素进行排序)时,您实际上正在对它指向的对象执行操作。这就像说,“去名片上指定的名为unSorted的办公室,把1号桌的椅子搬到2号桌。”

如果你随后去了名片上指定的名为array1的办公室,你当然会认为椅子已经移到了那里,因为它是同一个办公室。

如果你想要一份拷贝,你必须创建一份。有几种方法可以做到这一点,但最简单的方法是使用数组。复制

糜征
2023-03-14

考虑下面的例子:数组

import java.util.Arrays;

    class Test {


        public static void main(String[] args) {

            // array & copy both refer to the same Object
            double[] array = {5,4,3,2,1};
            double[] copy = array;
            // the following array is filled up "by hand" - thus it has no reference to the previous object
            double[] store = new double[array.length];



            for (int i = 0; i < array.length ; i++) {
                store[i] = array[i];
            }


            Arrays.sort(array);


            System.out.println("array"); // 1,2,3,4,5
            for (double d: array)
                System.out.println(d);
            System.out.println("copy"); // 1,2,3,4,5
            for (double d: copy)
                System.out.println(d);
            System.out.println("store"); // 5,4,3,2,1
            for (double d: store)
                System.out.println(d);


            // Primitives show a different behaviour
            double a = 5;
            double b = a;
            System.out.println(a +  " / " + b); // 5 / 5
            a = 10;
            System.out.println(a +  " / " + b); // 10 / 5
        }

    }
罗宪
2023-03-14

排序不是“一个新的初始化数组”。它只是同一数组的不同名称。

数组是对象,而不是基本体。它们作为指针而不是副本传递。

如果你想要一个副本,可以使用java。util。数组#copyOf

 类似资料:
  • 本文向大家介绍java对数组进行排序的方法,包括了java对数组进行排序的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java对数组进行排序的方法。分享给大家供大家参考。具体如下: 执行结果: 排序前:  12 24 25 4 9 68 45 7   排序后:  4 7 9 12 24 25 45 68 希望本文所述对大家的java程序设计有所帮助。

  • 问题内容: 我最近一直在思考定义数组的两种方式之间的区别: 有区别吗? 问题答案: 它们在语义上是相同的。添加该语法只是为了帮助C程序员习惯Java。 更可取,并且不会造成混淆。

  • 问题内容: 我在Swift中有一个包含一些对象ID的数组,而我有另一个包含这些对象及其ID的数组,所以像这样: 现在,id数组以某种自定义顺序排序,而我需要以相同顺序对对象数组进行排序。因此,例如: 所以我基本上需要实现这种重新排序方法。有谁有聪明的建议如何在Swift中做到这一点?我正在使用Swift 3,因此所有新API都可以使用。 问题答案: 您可以排序以遵循书面要求 另一个例子 这段代码在

  • 前言 数组的其他方法如下: 方法 描述 备注 indexOf(value) 从前往后索引,获取 value 在数组中的第一个下标 lastIndexOf(value) 从后往前索引,获取 value 在数组中的最后一个下标 find(function()) 找出第一个满足「指定条件返回true」的元素。 findIndex(function()) 找出第一个满足「指定条件返回true」的元素的in

  • 我有2个java数组 如果我按升序对int数组排序,它将是: 现在我想相应地对名称数组进行排序。输出应为: 我该如何维持一段关系?我见过这个链接(基于其他排序的数组排序数组),但它是针对js的

  • 问题内容: 假设我有一个方法m(),该方法将字符串数组作为参数。有什么方法可以在我打电话时直接声明该数组?即代替: 我可以只用一行代替它,而避免声明一个我永远不会使用的命名变量吗? 问题答案: