我知道Java可以使用
int num = 9;
int[] xxx = new int[num];
来创建变长数组,但是在实际操作中,经常不知道要用多少的长度,有没有什么真正意义上的动态数组?
arraycopy是数组复制的意思,给你个例子。 public class ArraycopyTest { // arraycopy(Object src, int srcStartIndex, Object dest, int destStartIndex, // int length) // 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。 // srcStartIndex:原数组中要开始复制的第一个元素的位置 // destStartIndex: 目标数组中要开始替换的第一个元素的位置 // length: 要复制的元素的个数 public static void main(String[] args) { // 静态初始化两个长度不同的数组 int src[] = { 1, 2, 3, 4, 5, 6 }; int dest[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
// 将数组src的4个元素copy到数组dest中 System.arraycopy(src, 1, dest, 2, 4);
// 输出数组dest for (int i = 0; i < 10; i++) { System.out.println(dest[i]); } } }
想要做到真正意义上的动态数组,只要做到其长度可以一直变就可以了。 可以通过把长度小的数组复制到长度大的数组来实现动态数组。其实对于长度更长的数据结构,可以使用链表来代替。
下面利用System.arraycopy()方法移动数组中的数据,来实现复制的功能。
public calss DynamicArrays {
private int[] data; //保存数据的数组
//构造
public DynamicArrays() {
data = new[1];//按需增长
}
public int get(int position) {
//数组指定位置的值
return data[position];
}
public void put(int position, int value) {
//把值存储到指定位置
if (position >= data.length) {
int newSize = 2 * data.length;
if (position >= newSize)
newSize = 2*position;
int[] newData = new int[newSize];
System.arraycopy(data, 0, newData, 0,data.length);//四个参数很好理解,原数组和起始位置以及对应的目的数组
data = newData;
}
data[position] = value;
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。