开发者社区> 问答> 正文

Java如何创建动态数组,变长数组不够方便啊。

我知道Java可以使用

int num = 9;
int[] xxx = new int[num];

来创建变长数组,但是在实际操作中,经常不知道要用多少的长度,有没有什么真正意义上的动态数组?

展开
收起
YDYK 2020-04-03 20:17:57 1506 0
3 条回答
写回答
取消 提交回答
  • 不用指定这个数值即可

    2020-04-04 08:49:01
    赞同 展开评论 打赏
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    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]); } } }

    2020-04-03 21:49:06
    赞同 展开评论 打赏
  • 想要做到真正意义上的动态数组,只要做到其长度可以一直变就可以了。 可以通过把长度小的数组复制到长度大的数组来实现动态数组。其实对于长度更长的数据结构,可以使用链表来代替。

    下面利用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;
    
    	}
    
    
    
    } 
    
    2020-04-03 20:30:35
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载