Java中一维数组的扩容与拷贝
程序员文章站
2022-04-10 09:56:10
关于一维数组的扩容:在java开发中,数组长度一旦确定,不可改变。那么数组满了怎么办?数组满了,需要扩容。java中对数组的扩容是:先建立一个大容量的数组,然后将小容量数组中的数据一个一个拷贝到大数组当中。拷贝的方法:System.arraycopy(src, srcPos, dest, destPos, len);src:待拷贝的源数组srcPos:待拷贝数组的开始拷贝下标dest:拷贝到的目标数组destPos:目标数组的开始接收下标len:需要拷贝元素的个数测试代码:publi...
关于一维数组的扩容:
在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