• java数组对象的复制


      一、首先,区分数组间的赋值  

     1 import java.util.Arrays;
     2 public class Array {
     3     public static void main(String[] args)
     4     {
     5         int[] array = new int[]{0, 1, 2, 3};
     6         int[] arr = array;  //书组赋值
     7         System.out.println(Arrays.toString(array)); //输出array
     8         System.out.println(Arrays.toString(arr)); //输出arr
     9         arr[0] = 4; 
    10         System.out.println(Arrays.toString(array));
    11         System.out.println(Arrays.toString(arr));
    12     }    
    13 }

      输出结果如下:

      

      这叫数组赋值,数组之间没有隔离性

      二、数组对象的复制,实现数组的隔离性

      首先介绍数组赋值的2中方法:

      1.System.arraycopy(Object src, int srcPos, Object dest,int destPos, int len)

        src - 源数组。 
            srcPos - 源数组中的起始位置。 
            dest - 目标数组。 
            destPos - 目标数据中的起始位置。 
            length - 要复制的数组元素的数量。

        该方法是Java API提供的,底层是c++写的,所以效率很高。   

     1 import java.util.Arrays;
     2 public class Array {
     3     public static void main(String[] args)
     4     {
     5         int[] array = new int[]{0, 1, 2, 3};
     6         int[] arr = new int[4]; //{0, 0, 0, 0}
     7         System.arraycopy(array, 0, arr, 0, array.length);
     8         System.out.println(Arrays.toString(array)); //输出array
     9         System.out.println(Arrays.toString(arr)); //输出arr
    10         arr[0] = 4; 
    11         System.out.println(Arrays.toString(array));
    12         System.out.println(Arrays.toString(arr));
    13     }    
    14 }

      

      可以看到数组之间有隔离性,这就是数组的复制

      2.Arrays.copyOf(JDK1.6版本提供的方法,所以你的开发环境JDk必须是1.6及以上

      该方法对于不同的的数据类型有不同的重载方法 

     1 //复杂数据类型
     2 public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
     3         T[] copy = ((Object)newType == (Object)Object[].class)
     4             ? (T[]) new Object[newLength]
     5             : (T[]) Array.newInstance(newType.getComponentType(), newLength);
     6         System.arraycopy(original, 0, copy, 0,
     7                          Math.min(original.length, newLength));
     8         return copy;
     9     }
    10 public static <T> T[] copyOf(T[] original, int newLength) {
    11 &nbsp;&nbsp;&nbsp;&nbsp;return (T[]) copyOf(original, newLength, original.getClass());
    12 }

      由U类型复制为T类型?
      original - 要复制的数组 
      newLength - 要返回的副本的长度 
      newType - 要返回的副本的类型

      

    1 //基本数据类型(其他类似byte,short···)
    2 public static int[] copyOf(int[] original, int newLength) {
    3         int[] copy = new int[newLength];
    4         System.arraycopy(original, 0, copy, 0,
    5                          Math.min(original.length, newLength));
    6         return copy;
    7     }
  • 相关阅读:
    aria2服务器
    小米路由器mini刷openwrt系统
    为玩客云或树莓派安装LNMP和PhpMyAdmin
    在玩客云或树莓派上通过ffmpeg将视频推流到直播平台
    阿里云盘+OneManager+Heroku+CFWorkers实现阿里云盘网络挂载
    ProBuilder操作一览表
    ProBuilder快速原型开发技术 ---操作基础
    VisualEffectGraph概述
    ProBuilder快速原型开发技术 ---进阶功能操作
    ProBuilder快速原型开发技术 ---模型精细化操作
  • 原文地址:https://www.cnblogs.com/xuepeng0521/p/4146257.html
Copyright © 2020-2023  润新知