如何在数组末尾添加元素?

我想知道如何在数组的末尾添加或追加一个新元素。 有没有简单的方法在最后添加元素? 我知道如何使用StringBuffer,但我不知道如何使用它来添加数组中的元素。 没有ArrayList或列表我更喜欢它。 我想知道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的实例列表。 最简单和最广泛使用的实现是ArrayList 。 这是一个例子:

 List words = new ArrayList(); words.add("Hello"); words.add("World"); words.add("!"); 

List.add()只是将一个元素附加到列表中,您可以使用List.size()获取列表的大小。

OP说,出于不明原因,“我更喜欢没有arraylist或列表。”

如果你所指的类型是一个原语(你提到整数,但你没有说你是指int还是Integer ),那么你可以使用一个NIO Buffer类,如java.nio.IntBuffer 。 这些行为与StringBuffer非常相似 – 它们充当原始类型列表的缓冲区(缓冲区存在于所有基元但不存在于对象中),并且您可以围绕数组包装缓冲区和/或从缓冲区中提取数组。

请注意,javadocs说:“缓冲区的容量永远不会消极,永远不会改变。” 它仍然只是一个数组的包装器,但是一个更好的工作。 有效扩展缓冲区的唯一方法是allocate()较大的缓冲区并使用put()将旧缓冲区转储到新缓冲区中。

如果它不是原始的,你应该只使用List ,或者提出一个令人信服的理由,为什么你不能或不会,也许有人会帮助你解决它。

正确的术语:由于数组是固定长度的结构(并且现有的长度不能改变),最后的表达式添加是没有意义的(单独)。

你可以做的是创建一个更大的新数组,并在最后一个插槽中填入新元素:

 public static int[] append(int[] array, int value) { int[] result = Arrays.copyOf(array, array.length + 1); result[result.length - 1] = value; return result; } 

这很快就会变得低效,因为每次调用append都会创建一个新数组并复制旧数组内容。

大幅减少开销的一种方法是创建一个更大的数组并跟踪它实际填充的索引。 添加元素变得简单,填充下一个索引并递增索引。 如果arrays完全填满,则会创建一个具有更多可用空间的新arrays。

并猜猜ArrayList的作用:确切地说。 因此,当需要动态大小的数组时,ArrayList是一个不错的选择。 不要重新发明轮子。

正如许多其他人指出的那样,如果你试图在列表末尾添加一个新元素,那么像array [array.length-1] = x; 应该做。 但这将取代现有元素。

对于类似连续添加到arrays的东西。 你可以跟踪索引并继续添加元素,直到你到达结束并具有添加的function返回下一个索引,这反过来将告诉你有多少元素可以适合数组。

当然,在这两种情况下,arrays的大小都是预定义的。 Vector可以是你的另一个选项,因为你不需要arraylist,它将允许你所有相同的function和function,并另外将负责增加大小。

来到你想要StringBuffer数组的部分。 我相信你要找的是getChars(int srcBegin,int srcEnd,char [] dst,int dstBegin)方法。 调查它可能会解决你的疑虑。 我想再次指出,在设法从中获取数组后,您仍然只能替换最后一个现有元素(在本例中为字符)。