java中复制数组的几种方式
2016-04-10 20:11
615 查看
在java语言中,数组是一个比较重要的话题,最近在使用的过程中遇到问题总结了下
最简单的方式就是直接赋值,A=B;它用于基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变.
直接用for循环赋值即可。
代码:
运行结果:
第二种方法使用克隆方法(Objectjava.lang.Object.clone()),得到数组的值,而不是引用,不能复制指定元素,灵活性差一点
代码:
运行结果:
使用System提供了的静态方法arraycopy(),我个人比较喜欢这种用复制方法,他可以指定复制的长度和位置。
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从
代码:
执行结果如下:
总结:同样的问题会有许多种不同的解法,选择最方便、最适合自己的一种就可以
(ps:有问题最好先查文档,文档里写的最可信、直观而又清楚了)
最简单的方式就是直接赋值,A=B;它用于基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变.
直接用for循环赋值即可。
代码:
public class Test { public static void main(String[] args) { int[] A={1,2,3,4,5}; System.out.println("数组A的元素如下:"); for(int i=0;i<A.length;i++){ System.out.print(A[i]+" "); } int[] B=A; System.out.println("\n复制的数组B:"); for(int i=0;i<B.length;i++){ System.out.print(B[i]+" "); } } }
运行结果:
第二种方法使用克隆方法(Objectjava.lang.Object.clone()),得到数组的值,而不是引用,不能复制指定元素,灵活性差一点
代码:
public class Test { public static void main(String[] args) { int[] A={1,2,3,4,5}; System.out.println("数组A的元素如下:"); for(int i=0;i<A.length;i++){ System.out.print(A[i]+" "); } int[] C; C=(int[])A.clone(); System.out.println("\n复制后的数组C是:"); for(int i=0;i<C.length;i++){ System.out.print(C[i]+" "); } } }
运行结果:
使用System提供了的静态方法arraycopy(),我个人比较喜欢这种用复制方法,他可以指定复制的长度和位置。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从
src引用的源数组到
dest引用的目标数组,数组组件的一个子序列被复制下来。被复制的组件的编号等于
length参数。源数组中位置在
srcPos到
srcPos+length-1之间的组件被分别复制到目标数组中的
destPos到
destPos+length-1位置。(以上是jdk文档中的解释,我的理解是src复制 的原数组,srcPos是复制原数组的起始位置,dest是需要复制的目标数组,destPos是目标数组的其实位置,length是复制的长度)
代码:
import java.util.Scanner; public class Test { public static void main(String[] args) { int[] A = { 1, 2, 3, 4, 5 }; System.out.println("数组A是:"); for (int i = 0; i < A.length; i++) { System.out.print(A[i] + " "); } Scanner scanner = new Scanner(System.in); System.out.println("\n请输入数组B的元素个数b:"); int b = scanner.nextInt(); scanner.close(); int[] B = new int[b]; System.arraycopy(A, 0, B, 0, b); System.out.println("赋值后的数组B是:"); for (int i = 0; i < B.length; i++) { System.out.print(B[i] + " "); } } }
执行结果如下:
总结:同样的问题会有许多种不同的解法,选择最方便、最适合自己的一种就可以
(ps:有问题最好先查文档,文档里写的最可信、直观而又清楚了)
相关文章推荐
- 20145317彭垚 《Java程序设计》第6周学习总结
- 20145221 《Java程序设计》第六周学习总结
- 谨以此错误警醒自己---java.lang.ClassNotFoundException:
- Log4j全面详解
- 20145313张雪纯 《Java程序设计》第6周学习总结
- java多态实例
- 码农小汪-spring框架学习之1-spring简单的介绍入门
- LeetCode 13 -Roman to Integer ( JAVA )
- 关于Struts2.3.28配置出现的问题:Dispatcher initialization failed
- Java虚拟机方法执行的概念模型
- 20145331 实验一 "Java开发环境的熟悉"
- LeetCode(java)6. ZigZag Conversion
- java编译时生成调试信息选项详解(javac -g)
- Java连接mysql详解&解决乱码
- Java泛型总结
- Struts2通用标签学习
- Struts2中result的type属性;值栈
- Java基础知识:equals;有参无参
- 20145337 《Java程序设计》第六周学习总结
- java中super和this的用法