Java中的可变长度(dynamic)数组

我想知道如何初始化一个整数数组,使其大小和值通过执行我的程序,改变任何build议?

是的:使用ArrayList 。

在Java中,“普通”数组是固定大小的。 你必须给他们一个规模,不能扩大或合同他们。 要改变大小,你必须创build一个新的数组,并复制你想要的数据 – 这对你来说是效率低下和痛苦的。

幸运的是,有各种内置的类来实现通用的数据结构,以及其他有用的工具。 您将需要检查Java 6 API的完整列表。

一个警告:ArrayList只能保存对象(如整数),而不是基元(例如整数)。 在大多数情况下, autoboxing / autounboxing会为你默默的照顾这个,但是你可能会根据你正在做的事情得到一些奇怪的行为。

Java中的数组的大小是固定的。 你需要的是一个ArrayList,它是Java中的一个非常有价值的集合。

代替

 Integer[] ints = new Integer[x] 

你用

 List<Integer> ints = new ArrayList<Integer>(); 

然后改变你使用ints.add(y)ints.remove(z)以及其他很多方便的方法,你可以在适当的Javadoc中find。

我强烈推荐学习Java中可用的Collections类,因为它们非常强大,给你很多内build的function,Java新手倾向于不必要地重写自己。

一旦实例化,数组的大小是固定的。 你可以使用List来代替。

自动装箱可以使一个List类似于一个数组,你可以简单地把int-values放进去:

 List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); 

我不同意以前的答案build议ArrayList ,因为ArrayList 不是一个dynamic数组,而是由一个数组支持的列表。 不同的是你不能做到以下几点:

 ArrayList list = new ArrayList(4); list.put(3,"Test"); 

它会给你一个IndexOutOfBoundsException,因为在这个位置没有元素,即使backing数组允许这样的添加。 所以你需要使用@ randy-lancebuild议的自定义可扩展数组实现

  1. build议使用List来处理小规模的大小。

  2. 如果你有大量的数字, 不要使用列表和自动装箱,

    列表<Integer>列表

对于每一个int,都会自动创build一个新的Integer。 当名单的大小增加时,你会发现它变得越来越慢。 这些整数是不必要的对象。 在这种情况下,使用估计的大小会更好,

 int[] array = new int[ESTIMATED_SIZE]; 
 Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below public class DynamicArray { static int []increaseSizeOfArray(int []arr){ int []brr=new int[(arr.length*2)]; for (int i = 0; i < arr.length; i++) { brr[i]=arr[i]; } return brr; } public static void main(String[] args) { int []arr=new int[5]; for (int i = 0; i < 11; i++) { if (i<arr.length) { arr[i]=i+100; } else { arr=increaseSizeOfArray(arr); arr[i]=i+100; } } for (int i = 0; i < arr.length; i++) { System.out.println("arr="+arr[i]); } } } 

来源: 如何制作dynamic数组

如何使用List来代替? 例如, ArrayList<integer>

您不能更改数组的大小。 但是,您可以使用正确的大小创build一个新数组,并将旧数组中的数据复制到新数组中。

但是你最好的select是使用jacarta公共的IntList。 ( 这里 )

它的工作原理就像一个List,但占用的空间更小,效率也更高,因为它存储的是int,而不是将包装器对象存储在int(这就是Integer类的东西)。

我回答了这个问题,不,你不需要一个arraylist或任何其他的事情,这是一个任务,我完成了它,所以是数组可以增加的大小。 这里是链接如何使用Javadynamic数组 ,这里是我回答Javadynamic数组的问题的链接