您的位置 首页 java

Java中数组复制的三种方式,你会几种?

首先数组是我们常用的一种存储结构,经常需要把一个数组中的元素复制到另一个数组中;另外我们在阅读集合的底层源码时,比如ArrayList集合,它的底层就是数组。

当集合扩容时,其中的一个过程就是进行数组的复制,如果我们对这个复制过程不理解,自然也就读不懂这个源码了。所以今天九哥就给大家讲解数组的三种复制方式,希望今天的内容可以帮助大家巩固基础知识。

首先我们来看看第一种数组复制方式。

一. 第一种,遍历的过程中完成数组的复制

1.代码案例

第一种数组复制方式的案例代码如下:

 public  static   void  main(String[] args) {
 //声明数组
 int[] aryNum={12,23,34,45,56,67};
 //先输出aryNum数组里的数据
 System.out.println("aryNum数组里的元素为:");
 for(int i=0; i<aryNum.length; i++){
 System.out.print(aryNum[i]+" ");
 }
 System.out.println("");

 //创建新数组,新数组的长度和原数组一致
 int[] newAryNum=new int[aryNum.length];

 //遍历aryNum数组,在遍历的过程中,
 //把原数组各个索引位置的元素赋值给新数组newAryNum对应的索引位置上
 for(int i=0; i<newAryNum.length; i++){
 newAryNum[i] = aryNum[i];
 }
 
 //遍历输出新数组newAryNum
 System.out.println("newAryNum数组里的元素为:");
 for(int i=0; i<newAryNum.length; i++){
 System.out.print(newAryNum[i]+" ");
 }
}  

2.运行结果如下

3. 执行结果分析

这种复制方法最简单易懂,但每次复制的时候都需要进行遍历,比较繁琐。

接下来我们再来看第二种数组复制方式。

二. 第二种,调用Arrays类中的copyOf()方法

1.源码分析

通过阅读源码我们发现,Arrays类中对copyOf()方法进行了重载,也就是能够对各种类型的数组进行复制。

我们以案例中的整形数组为例,先阅读以下复制整形数组的源码

 public static int[]  copy Of(int[] original, int newLength) {
 int[] copy = new int[newLength];
 System.arraycopy(original, 0, copy, 0,
 Math.min(original.length, newLength));
 return copy;
}  

源码分析:

  • 方法的参数1: original 是要复制的数组;
  • 方法的参数2: newLength 是复制后的数组的长度,也可以理解为要复制几个元素,因为这个值是多少,新数组的长度就是多少;
  • 方法的返回值: 就是新创建的复制之后的数组。

2.案例代码

先通过int[] copy = new int[newLength]; 创建了一个新的数组。然后调用 System 类的arraycopy方法完成的数组复制,后续会讲解System.arraycopy()方法。

 public static void main(String[] args) {
 //声明数组
 int[] aryNum={12,23,34,45,56,67};
 //先输出aryNum数组里的数据
 System.out.println("aryNum数组里的元素为:");
 for(int i=0; i<aryNum.length; i++){
 System.out.print(aryNum[i]+" ");
 }
 System.out.println("");
 
 //调用Arrays.copyOf()方法,完成数组复制
 int[] newAryNum=Arrays.copyOf(aryNum,aryNum.length);

 //遍历输出新数组newAryNum
 System.out.println("newAryNum数组里的元素为:");
 for(int i=0; i<newAryNum.length; i++){
 System.out.print(newAryNum[i]+" ");
 }
}  

3.执行结果

最后我们再来看第三种数组复制方式。

三. 第三种,直接调用System.arraycopy()方法

1.System.arraycopy()方法分析

我们先看一下这个System.arraycopy()方法的源码声明。

 public static native void arraycopy(Object src, int srcPos,
 Object dest, int destPos,
 int length);  

方法参数解析如下:

  • 参数src: 要源数组,也就是要从这个数组里复制;
  • 参数srcPos: 从源数组中复制元素的起始位置;
  • 参数dest:目标数组,也就是复制到哪个数组中;
  • 参数destPos:复制到目标数组的起始位置;
  • 参数length: 要赋值的数组的元素个数。
 public static void main(String[] args) {
 //声明数组
 int[] aryNum={12,23,34,45,56,67};
 //先输出aryNum数组里的数据
 System.out.println("aryNum数组里的元素为:");
 for(int i=0; i<aryNum.length; i++){
 System.out.print(aryNum[i]+" ");
 }
 System.out.println("");

 //调用Arrays.copyOf()方法
 //先自行创建一个目标数组,也就是复制后的数组
 int[] newAryNum=new int[aryNum.length];
 System.arraycopy(aryNum,0,newAryNum,0,aryNum.length);
 
 //遍历输出新数组newAryNum
 System.out.println("newAryNum数组里的元素为:");
 for(int i=0; i<newAryNum.length; i++){
 System.out.print(newAryNum[i]+" ");
 }
}  

2.执行结果

Java中数组复制的三种方式,你会几种?

3.结果分析

这种方法的好处就是比较灵活,不必复制整个数组,可以自己定义从哪个元素开始复制,以及复制多少个元素。

//从源数组的第4个元素开始复制,共复制2个元素,复制到目标数组的第2个元素开始的位置
System.arraycopy(aryNum,3,newAryNum,1,2);

现在你对Java中数组的复制方式了解了吗?如果你还有其他疑问,可以在评论区留言哦。

文章来源:智云一二三科技

文章标题:Java中数组复制的三种方式,你会几种?

文章地址:https://www.zhihuclub.com/174440.shtml

关于作者: 智云科技

热门文章

网站地图