定义一个数组
int[] a={3,1,4,2,5};
int[] b=a;
数组b只是对数组a的又一个引用,即浅拷贝。
如果改变数组b中元素的值,其实是改变了数组a的元素的值,要实现深度复制,可以用clone或者System.arrayCopy
int[] a={3,1,4,2,5};
int[] b=a.clone();
b[0]=10;
System.out.println(b[0]+" "+a[0]);
但是clone和System.arrayCopy都是对一维数组的深度复制。
对于二维数组则不一样:
int[][] a={{3,1,4,2,5},{4,2}};
int[][] b=a.clone();
b[0][0]=10;
System.out.println(b[0][0]+" "+a[0][0]);
输出为10 10所以clone并不能直接作用于二维数组。
因为java中没有二维数组的概念,只有数组的数组。所以二维数组a中存储的实际上是两个一维数组的引用。当调用clone函数时,是对这两个引用进行了复制。
要证明,只需看下面的输出
int[][] a={{3,1,4,2,5},{4,2}};
int[][] b=a.clone();
b[0][0]=10;
System.out.println(b[0][0]+" "+a[0][0]);
System.out.println(a[0]==b[0]);
第5句输出为true.用clone对二维数组进行复制,要在每一维上调用clone函数
int[][] a={{3,1,4,2,5},{4,2}};
int[][] b=new int[a.length][];
for(int i=0;i<a.length;i++)
{
b[i]=a[i].clone();
}
b[0][0]=10;
System.out.println(b[0][0]+" "+a[0][0]);
System.out.println(b[0]==a[0]);
输出为10 3 false
小结:
数组的复制方法现在至少有四个思路:
1 使用循环结构 这种方法最灵活。唯一不足的地方可能就是代码较多
2 使用Object类的clone()方法, 这种方法最简单,得到原数组的一个副本。灵活形也最差。效率最差,尤其是在数组元素很大或者复制对象数组时。
protected Object clone()
3 使用Systems的arraycopy这种方法被告之速度最快,并且灵活性也较好,可以指定原数组名称、以及元素的开始位置、复制的元素的个数,目标数组名称、目标数组的位置。
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
4 Arrarys类的copyOf()方法与copyOfRange()方法可实现对数组的复制
static <T> T[] copyOf(T[] original, int newLength)
static <T> T[] copyOfRange(T[] original, int from, int to)
参考文献http://jingyan.baidu.com/article/e4d08ffddbb7610fd2f60d90.html
分享到:
相关推荐
6. Stream API:Java 8引入的Stream API允许对数组进行函数式操作,如过滤、映射和收集。例如,`int sum = Arrays.stream(numbers).sum();` 计算数组所有元素的和。 7. var关键字:Java 10引入了var关键字,可以在...
作为写的第一篇Java文章,展望一下开始下面的学习; 数组: 1.数组浅拷贝: 1 public static void main(String[] args) 2 { 3 int [] a={1,3,5,7,8,9}; 4 int[] b=a; //这里赋值的...
JAVA 对数组进行初始化填充的方法示例 JAVA 中对数组进行初始化填充是一种常见的操作,主要用于初始化数组元素的值。今天,我们将介绍两种对数组进行初始化填充的方法,并通过实例代码进行详细的解释。 知识点一:...
总之,虽然Java数组的大小是固定的,但我们可以通过创建新的数组并复制元素来模拟添加、删除和插入操作。然而,这样的做法在性能上可能不如使用Java集合框架中的动态数据结构。因此,在设计程序时,应根据需求和性能...
在Java中,数组的复制是一个重要的概念,因为这涉及到对数组元素的读取、存储以及修改。实验中使用了Java标准库中的Arrays类提供的copyOf()和copyOfRange()方法来实现数组的复制操作。通过复制并修改部分数组元素,...
本文展示了 Java 数组及 Arrays 类对数组的操作实例,包括数组的初始化、排序、查找、复制、比较等操作。这些操作是 Java 编程中非常重要的一部分,了解这些操作可以帮助我们更好地使用 Java 编程语言。
`Arrays`类提供了多种对数组进行操作的方法,如`clone()`用于创建数组的副本,`copyOf()`用于创建指定长度的新数组并复制原有数组的一部分或全部,`equals()`判断两个数组是否相等,`sort()`则是对数组进行排序的...
Java集合框架中的`Arrays`类提供了对数组排序的方法,如`Arrays.sort()`,可用于整型、字符型等基本类型的数组,也可通过自定义比较器对对象数组进行排序。 八、数组与集合框架的关系 虽然数组是Java的基础,但集合...
Java提供了`Arrays.sort()`方法来对数组进行排序: 1. 对于基本类型数组,如整数数组,可以直接调用`Arrays.sort(int[])`: ```java int[] arr = {5, 2, 8, 1, 9}; Arrays.sort(arr); ``` 2. 对于对象数组,`...
这可能涉及到对数组或集合的操作,以及随机数生成器。 4. 状态检查:当用户尝试重新组合拼图时,需要实时检查当前状态是否正确。这可以通过比较当前布局与原始图像进行,可能需要使用位图操作或自定义的比较算法。 ...
8. **数组作为参数**:向方法传递数组时,传递的是数组的引用,这意味着在方法内部对数组的修改会影响到原数组。 9. **数组初始化**:数组初始化包括声明数组类型、指定数组长度以及为每个元素赋值。 10. **数组...
1. **数组排序**:使用Arrays.sort()方法对数组进行排序。 2. **集合遍历**:使用for-each循环遍历集合中的元素。 3. **集合转换为数组**:使用toArray()方法将集合转换为数组。 4. **集合的增删改查**:添加元素、...
例如,我们可以使用Arrays类提供的方法对数组进行排序: ```java Arrays.sort(numbers); ``` 如果需要复制一个数组,可以使用Arrays.copyOf()方法: ```java int[] copy = Arrays.copyOf(numbers, numbers.length);...
通过这种方式,即使`someMethod()`内部对数组进行了修改,`jg`数组也不会受到影响,因为它们指向的是两个不同的内存区域。这样,我们就可以避免因直接赋值而导致的数组错误,提高程序的稳定性和健壮性。 在日常开发...
- `sortArray()`:对数组进行排序。 - `binarySearch()`:二分查找方法,用于已排序的数组。 3. **数组遍历** 我们可以使用for循环来遍历数组中的所有元素: ```java for (int i = 0; i ; i++) { System.out....
- **安全性增强**:Java提供了对数组越界的保护,当尝试访问超出数组边界的位置时,会抛出`ArrayIndexOutOfBoundsException`异常。 - **动态数组操作**:Java中虽然不能直接改变数组大小,但可以通过创建新数组并将...
Arrays类提供了对数组的各种操作,如排序和复制。Comparable接口用于定义对象的自然排序,而Comparator接口则用于自定义比较逻辑。 正则表达式通过java.util.regex包实现,如Pattern和Matcher类,用于字符串匹配和...
* ArrayList 是一个动态数组,提供了对数组的操作方法。 5.2 ArrayList 核心源码 * ArrayList 的核心实现是基于数组的动态扩容。 5.3 ArrayList 源码分析 * System.arraycopy() 和 Arrays.copyOf() 是数组复制的...
1. **数据处理**:Java的`java.util`包中的`Arrays`类提供了对数组的各种操作,如排序、查找、填充等。`Collections`类则针对集合框架提供了类似的功能,如排序列表、反转、复制等。此外,`HashMap`和`TreeMap`等...
1. **`java.util.Arrays`**:这是一个非常基础且重要的工具类,提供了对数组进行操作的各种静态方法,如排序、复制、填充、比较等。例如,`Arrays.sort()`用于对数组进行升序或降序排序,`Arrays.copyOf()`则用于...