java怎么重新定义int数组长度?

Python014

java怎么重新定义int数组长度?,第1张

在Java中,数组对象Array的长度是在实例化时就定死了,不能修改。

像你这种情况,一般是新建一个数组,重新设置长度,可能的话再将老数组里的值拷贝进去:

public class ArrayTest {

public static void main(String[] args) {

int[] arr1 = { 1, 2, 3, 4, 5 }// 初始化一个数组,长度是5(定死了)

int[] arr2 = new int[10]// 重新初始化数组,长度是10

// 将老数组复制到新数组

for (int i = 0i <arr1.lengthi++) {

arr2[i] = arr1[i]

}

// 将老数组对象arr1指向新数组

arr1 = arr2

// 如果不要复制,最简单的就是直接实例化

int[] arr1_1 = new int[5]// 初始化一个数组,长度是5(定死了)

arr1_1 = new int[10]// 再实例化一次,就是一个新数组,以前数组里的东西就不存在类

}

}

不可以。

因为Java中的数组长度是不可变的,数组对象的length属性是常量。当然这并不意味着没有解决办法。如果你的确需要数组的容量不断变化,那最好使用ArrayList。如果数组的长度的调整并不频繁,只是偶尔需求,可以使用Arrays.copyOf来“调整数组的长度”,这里的调整长度并不和我开始的回答“数组长度是不可变的”冲突,因为这个方法是new一个更大的数组,把旧数组元素拷贝进去,然会返回给你的。

源代码:(byte数组版本)

public static byte[] copyOf(byte[] original, int newLength) {

        byte[] copy = new byte[newLength]

        System.arraycopy(original, 0, copy, 0,

                         Math.min(original.length, newLength))

        return copy

    }

java中的数组一旦被定义长度是不允许修改长度的,如果题主希望实现类似的功能可以采用ArrayList。ArrayList的底层结构就是数组。当ArrayList实例化时会默认设置一个长度,当长度不够用时会自动扩展现有长度的1/2.(假设初始数组长度为10,现在变成了15)

System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length )能够实现数组复制的功能。

假设有数组a(src),数组b(dest),我们希望把a数组中从下标为2(srcPos)长度为3(length)的元素复制到b的下标为4(destPos)开始的元素中。java代码示例如下:

int a = [1,3,5,7,9]

int b = [2,4,6,8,0,2,4]

System.arraycopy(a,2,b,4,3)

//最终b的内容为[2,4,6,8,5,7,9]

但是如果注意API的话会发现arraycopy有几个限制

1、a,b的元素类型必须相同(int和Integer这里也是需要区分的)

2、数组不能越界,也就是srcPos+length不能超过a的长度;desPos+length也不能超过b的长度,否则就会报数组越界的一场。这也说明了无法实现数组长度的动态扩展。