我想知道如何向数组末尾添加或追加新元素。是否有简单的方法在末尾添加元素?我知道如何使用StringBuffer,但不知道如何将其用于数组中添加元素。我希望不使用ArrayList或list。我想知道StringBuffer是否适用于整数。
我想知道如何向数组末尾添加或追加新元素。是否有简单的方法在末尾添加元素?我知道如何使用StringBuffer,但不知道如何将其用于数组中添加元素。我希望不使用ArrayList或list。我想知道StringBuffer是否适用于整数。
由于在Java中,数组长度是固定的,因此无法向数组中添加元素。但是,您可以使用Arrays.copyOf(array, size)
从现有数组构建一个新数组:
public static void main(String[] args) {
int[] array = new int[] {1, 2, 3};
System.out.println(Arrays.toString(array));
array = Arrays.copyOf(array, array.length + 1); //create new array from old array and allocate one more element
array[array.length - 1] = 4;
System.out.println(Arrays.toString(array));
}
我仍然建议停止使用数组,改用List
。
Java中的数组长度是固定的,无法更改。因此,Java提供了一些类来维护可变长度的列表。
通常有 List<T>
接口,用于表示类 T
的实例列表。最简单和广泛使用的实现是 ArrayList
。这是一个示例:
List<String> words = new ArrayList<String>();
words.add("Hello");
words.add("World");
words.add("!");
List.add()
方法会将一个元素添加到列表的末尾,List.size()
方法可以获取列表的大小。
为了澄清术语:数组是固定长度的结构(现有数组的长度不能改变),“在末尾添加”这个表达本身没有意义。
你可以做的是创建一个新的数组,比原数组多一个元素,并将新元素填充到最后一个位置:
public static int[] append(int[] array, int value) {
int[] result = Arrays.copyOf(array, array.length + 1);
result[result.length - 1] = value;
return result;
}
每次调用“append”时,都会创建一个新的数组,并将旧数组内容复制到新数组中,这很快变得效率低下。
大大减少开销的一种方法是创建一个较大的数组,并跟踪它实际填充的索引。添加元素就像填充下一个索引并递增索引一样简单。如果数组完全填满,则会创建一个具有更多空闲空间的新数组。
而ArrayList恰好做到了这一点。因此,在需要动态大小的数组时,ArrayList是一个不错的选择。不要重复造轮子。
java.nio.IntBuffer
。它们的作用很像StringBuffer
——它们充当原始类型列表的缓冲区(所有原始类型都有缓冲区,但对象没有),你可以将缓冲区包装在一个数组周围和/或从缓冲区中提取数组。allocate()
一个更大的缓冲区,并使用put()
将旧缓冲区转储到新缓冲区中。List
,或者想出一个令人信服的理由,说明你不能或不想使用它,并且也许有人会帮助你解决这个问题。使用流的一行代码
Stream.concat(Arrays.stream( array ), Stream.of( newElement )).toArray();
List
。 - khelwoodArrayList
对于数组就像一个StringBuffer
对于String
。如果你想要添加元素并得到一个数组作为结果而不是一个String
,那么你确实想使用ArrayList
。 - MattLBeck