Variable length (Dynamic) Arrays in Java

我想知道如何初始化一个整数数组,使它的大小和值在我的程序执行过程中发生变化,有什么建议吗?

460501 次浏览

是: 使用 数组列表

在 Java 中,“普通”数组是固定大小的。你必须给他们一个大小,不能扩大或收缩他们。要更改大小,您必须创建一个新数组并复制所需的数据——这样做效率低下,而且对您来说很痛苦。

Fortunately, there are all kinds of built-in classes that implement common data structures, and other useful tools too. You'll want to check Java6API for a full list of them.

注意: ArrayList 只能保存对象(例如 Integers) ,而不能保存原语(例如 int)。在大多数情况下,自动装箱/自动装箱会默默地为您处理这个问题,但是您可能会得到一些奇怪的行为,这取决于您正在做什么。

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

但是您最好的选择是使用 jacartacommons 中的 IntList

它的工作原理与 List 类似,但是占用的空间更少,效率更高,因为它存储的是 int,而不是在 int 上存储包装对象(Integer 类就是这样的)。

How about using a List instead? For example, ArrayList<integer>

实例化后数组的大小是固定的。您可以改用 List。

Autoboxing make a List usable similar to an array, you can put simply int-values into it:

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

Java 中的数组的大小是固定的。您需要的是一个 ArrayList,它是 Java 中众多极其有价值的集合之一。

而不是

Integer[] ints = new Integer[x]

你用

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

然后使用 ints.add(y)ints.remove(z)修改列表,在适当的 Javadocs 中可以找到许多其他方便的方法。

我强烈推荐学习 Java 中可用的 Collective 类,因为它们非常强大,并且提供了许多 Java 新手不必要地试图重写自己的内置功能。

我不同意以前的答案建议 ArrayList,因为 ArrayListnot一个动态数组,但一个列表由一个数组支持。区别在于你不能做以下事情:

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

It will give you an IndexOutOfBoundsException because there is no element at this position yet even though the backing array would permit such an addition. So you need to use a custom extendable Array implementation like suggested by @randy-lance

  1. 建议使用 List 来处理小比例尺。

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

    List< Integer> list

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

int[] array = new int[ESTIMATED_SIZE];