0

我需要一个数组,我可以从一开始就确定它的大小,如果它没有更多的空格,那么将它的大小增加X. 例如:

int arraySize = 2;
int[] intArray = new int[arraySize]; 
int counter = 0;

while(something){       
    if(counter == arraySize){
        // increase array size by X
    }

    intArray[counter] = counter;
    counter++;
}

我检查了ArrayListVector但我没有找到办法。

4

6 回答 6

3

您不能在 Java 中扩展数组。一旦创建,它的大小是固定的。

ArrayList根本不是问题,因为它会自动扩展以适应新元素.add()

如果您仍然坚持使用数组,则可以使用它:

intArray = Arrays.copyOf(intArray, newLength);

但是ArrayList,如果您对数组没有特定需求,请使用。你也可以用.toArray()它把它变成一个数组;但是请注意,如果这是一个整数数组,则必须使用 an Integer[]-- 不幸的是,JDK 中没有int[]从 an返回 an 的方法Iterable<Integer>,这很遗憾。Guava 有这样的方法,使用 Guava。

注意Vector:如果可以帮助,请不要使用;这个类在新代码中完全过时了。出于兼容性原因,JDK 的某些部分仍然使用它,但仅此而已。如果您需要并发,还有更好的方法,例如CopyOnWriteArrayList.

于 2013-06-17T08:17:26.770 回答
2

您可以使用 Arrays.copyOf :

intArray = Arrays.copyOf(intArray, intArray.length + additional);
于 2013-06-17T08:17:33.510 回答
0

做到这一点的唯一方法是创建新数组并复制数据。但是,建议您改用ArrayList

于 2013-06-17T08:17:36.713 回答
0

使用“System.arraycopy”或使用 ArrayList 来实现您的可变大小目标

于 2013-06-17T08:19:17.727 回答
0

ArrayListVector自行调整大小,因此您根本不需要手动进行。缺点是它们使用对象类型,而不是原语。鼓励您ArrayListVector已弃用的方式使用。

如果您需要自动调整大小的原始数组,请使用Apache Commons Primitives

如果要手动调整数组大小,则应分配新数组复制数据更改引用,如下所示:

int[] array_new = new int[size_new];
System.arraycopy(array, 0, array_new, 0, array.length);
array = array_new;

Arrays.copy()按照其他答案的建议使用。

于 2013-06-17T08:20:05.200 回答
0

我认为ArrayList在这种情况下比简单的数组更好,因为它会自动增长。从javadoc

每个 ArrayList 实例都有一个容量。容量是用于存储列表中元素的数组的大小。它总是至少与列表大小一样大。随着元素被添加到 ArrayList,它的容量会自动增长。除了添加一个元素具有恒定的摊销时间成本这一事实之外,没有指定增长策略的细节。

但是,如果您必须使用数组,Arrays实用程序类会为您提供帮助

intArray = Arrays.copyOf(intArray, intArray.length + x);
于 2013-06-17T08:31:54.253 回答