考虑以下事项:
array1
包含一个列表。 int[]unSorted=array1;
一个新的初始化数组作为(重复)工作。 Arrays.sort(array1);
假设只对原始的Arrayarray1
进行排序。问题发生时,我使用排序方法Arrays.sort
。它对链接到array1
的所有数组进行排序,包括(重复的)!!那是为什么呢?它应该只改变括号内声明的数组!可不是吗?
array1实际上不是一个数组:它是对数组的引用。这有点像如果你给某人一张写有你办公室地址的名片,那张名片不是真正的办公室,而是告诉你如何到达办公室的东西。
当您执行int[]unSorted=array1
时,您是在复制引用,而不是数组。同样,这就像有人在你的名片上复制信息。
当您对unSorted
执行操作(例如移动其元素进行排序)时,您实际上正在对它指向的对象执行操作。这就像说,“去名片上指定的名为unSorted
的办公室,把1号桌的椅子搬到2号桌。”
如果你随后去了名片上指定的名为array1
的办公室,你当然会认为椅子已经移到了那里,因为它是同一个办公室。
如果你想要一份拷贝,你必须创建一份。有几种方法可以做到这一点,但最简单的方法是使用数组。复制
。
考虑下面的例子:数组
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
}
}
本文向大家介绍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(),该方法将字符串数组作为参数。有什么方法可以在我打电话时直接声明该数组?即代替: 我可以只用一行代替它,而避免声明一个我永远不会使用的命名变量吗? 问题答案: