当前位置: 移动技术网 > IT编程>开发语言>Java > Java中一维数组的扩容与拷贝

Java中一维数组的扩容与拷贝

2020年07月12日  | 移动技术网IT编程  | 我要评论

关于一维数组的扩容:
在java开发中,数组长度一旦确定,不可改变。
那么数组满了怎么办?数组满了,需要扩容。

java中对数组的扩容是:
先建立一个大容量的数组,然后将小容量数组中的数据一个一个拷贝到大数组当中。

拷贝的方法:

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

src:待拷贝的源数组
srcPos:待拷贝数组的开始拷贝下标
dest:拷贝到的目标数组
destPos:目标数组的开始接收下标
len:需要拷贝元素的个数

测试代码:

public class ArrayTest05 {

    public static void main(String[] args) {
        //静态实例化待拷贝的数组,3个元素
        Person[] srcPer = {new Person(1002,"李四"),
                new Person(1003,"王五"),
                new Person(1004,"赵六")};

        //动态实例化一个较大的数组,来接受数据
        Person[] destPer = new Person[5];
        //假设目标数组中已经存储了一个Person张三
        destPer[0] = new Person(1001,"张三");

        //拷贝之前,先输出两个数组的信息:每个对象的数据 + 哈希处理的对象内存地址
        System.out.println(destPer[0].id + "," + destPer[0].name + "   地址:" + destPer[0].hashCode());
        for (int i = 0; i < srcPer.length; i++) {
            System.out.println(srcPer[i].id + "," + srcPer[i].name + "   地址:" + srcPer[i].hashCode());
        }
        System.out.println("----------------------------------------------------------------------");

        //开始拷贝,将srcPer全部拷贝到destPer当中
        System.arraycopy(srcPer, 0, destPer, 1, srcPer.length);

        //遍历目标数组,检测是否拷贝成功
        for (int i = 0; i < destPer.length; i++) {
            if (destPer[i] != null)
                System.out.println(destPer[i].id + "," + destPer[i].name + "   地址:" + destPer[i].hashCode());
        }

        //拷贝成功,销毁srcPer数组
        srcPer = null;
        //建议垃圾回收器启动,建议归建议,垃圾少时可能不会启动
        System.gc();
    }

}

class Person {
    int id;
    String name;

    //构造方法
    public Person() {

    }
    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

运行截图:
在这里插入图片描述
数组存储引用数据类型,扩容时进行拷贝的内存图:
在这里插入图片描述


总结:
java中对数组的扩容是:

先建立一个大容量的数组,然后将小容量数组中的数据一个一个拷贝到大数组当中。

拷贝的方法:
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int len);

提醒:如果数组存储的是引用数据类型,System.arraycopy()方法拷贝的是地址,不是对象。

本文地址:https://blog.csdn.net/pipizhen_/article/details/107272502

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网