我想知道如何初始化一个整数数组,以便它的大小和值在我的程序执行中发生变化,有什么建议吗?
答案 0 :(得分:115)
是:使用ArrayList。
在Java中,“普通”数组是固定大小的。你必须给它们一个尺寸,不能扩展或收缩它们。要更改大小,您必须创建一个新数组并复制所需的数据 - 这对您来说效率低下并且很痛苦。
幸运的是,有各种内置类实现了通用数据结构,以及其他有用的工具。您需要查看the Java 6 API以获取完整列表。
一个警告:ArrayList只能保存对象(例如整数),而不能保存基元(例如整数)。在大多数情况下,autoboxing/autounboxing将默默地为您处理此问题,但根据您正在做的事情,您可能会得到一些奇怪的行为。
答案 1 :(得分:33)
Java中的数组具有固定的大小。你需要的是一个ArrayList,它是Java中许多非常有价值的集合之一。
而不是
Integer[] ints = new Integer[x]
你使用
List<Integer> ints = new ArrayList<Integer>();
然后更改列表,使用ints.add(y)
和ints.remove(z)
以及其他许多方便的方法,您可以在相应的Javadoc中找到它们。
我强烈建议您研究Java中可用的Collections类,因为它们非常强大,并且为您提供了许多内置功能,Java-newbies倾向于尝试不必要地重写它们。
答案 2 :(得分:22)
一旦实例化,数组就是固定大小。您可以改用List。
Autoboxing使List可以像数组一样使用,你可以简单地将int值放入其中:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
答案 3 :(得分:10)
我不同意以前提出ArrayList
的答案,因为ArrayList
不是动态数组,而是由数组支持的List。不同之处在于您无法执行以下操作:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
它会给你一个IndexOutOfBoundsException,因为在这个位置上没有元素,即使支持数组允许这样的添加。因此,您需要使用@ randy-lance
建议的自定义可扩展数组实现答案 4 :(得分:10)
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]);
}
}
}
答案 5 :(得分:7)
建议使用List来处理小规模的尺寸。
如果你有大量的数字,从不使用列表和自动装箱,
列表与LT;整数&GT;列表
对于每个int,都会自动创建一个新的Integer。当列表大小增加时,你会发现它变慢了。这些整数是不必要的对象。 在这种情况下,使用估计的大小会更好,
int[] array = new int[ESTIMATED_SIZE];
答案 6 :(得分:4)
您无法更改数组的大小。但是,您可以创建一个具有正确大小的新数组,并将数据从旧数组复制到新数组。
但你最好的选择是使用jacarta commons中的IntList。 (here)
它就像List一样工作,但占用空间更少,效率更高,因为它存储int而不是在int上存储包装器对象(这就是Integer类)。
答案 7 :(得分:4)
如何使用List
呢?例如,ArrayList<integer>
答案 8 :(得分:-4)
我回答了这个问题,不,你不需要一个arraylist或任何其他东西,这是一个任务,我完成了所以是的数组可以增加大小。链接在这里 How to use Java Dynamic Array 这是我回答的问题的链接 Java Dynamic arrays