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

问题描述 投票:0回答:7

我想知道如何向数组末尾添加或附加新元素。有什么简单的方法可以在末尾添加元素吗?我知道如何使用 StringBuffer,但不知道如何使用它在数组中添加元素。我更喜欢没有 ArrayList 或列表的它。 我想知道 StringBuffer 是否适用于整数。

java arrays append stringbuffer
7个回答
13
投票

不能向数组添加元素,因为在 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


5
投票

Java中的数组有固定的长度,不能改变。因此,Java 提供了允许您维护可变长度列表的类。

一般有

List<T>
接口,它代表类
T
的实例列表。最简单且使用最广泛的实现是
ArrayList
。这是一个例子:

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

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


2
投票

为了澄清术语的权利:数组是固定长度结构(并且现有的长度不能更改)表达式在末尾添加是没有意义的(本身)。

您可以做的是创建一个大一个元素的新数组,并将新元素填充到最后一个槽中:

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

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

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

猜猜 ArrayList 是做什么的:正是如此。所以当需要动态调整大小的数组时,ArrayList是一个不错的选择。不要重新发明轮子。


1
投票

OP 出于未知原因说,“我更喜欢没有数组列表或列表。”

如果您引用的类型是基元(您提到整数,但没有说明您的意思是

int
还是
Integer
),那么您可以使用 NIO Buffer 类之一,例如
java.nio.IntBuffer
。它们的作用很像
StringBuffer
的作用 - 它们充当基元类型列表的缓冲区(所有基元都存在缓冲区,但对象不存在),并且您可以将缓冲区包装在数组周围和/或从中提取数组缓冲区。

请注意,javadoc 说:“缓冲区的容量永远不会是负数,并且永远不会改变。”它仍然只是数组的包装,但使用起来更好。有效扩展缓冲区的唯一方法是

allocate()
一个更大的缓冲区,并使用
put()
将旧缓冲区转储到新缓冲区中。

如果它不是一个原语,你可能应该只使用

List
,或者想出一个令人信服的理由来解释为什么你不能或不会,也许有人会帮助你解决它。


1
投票

正如许多其他人指出的那样,如果您尝试在列表末尾添加新元素,则类似于 array[array.length-1]=x;应该做的。但这将替换现有元素。

对于诸如连续添加到数组之类的事情。您可以跟踪索引并继续添加元素,直到到达末尾,并让执行加法的函数返回下一个索引,这反过来会告诉您数组中还可以容纳多少元素。

当然,在这两种情况下,数组的大小都是预先定义的。 Vector 可以是您的另一个选择,因为您不需要 arraylist,它将允许您拥有所有相同的特性和功能,并且另外将负责增加大小。

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


1
投票

带流的单行

Stream.concat(Arrays.stream( array ), Stream.of( newElement )).toArray();

0
投票

此示例在数组末尾插入元素, 在此数组中,我们在整数末尾数组中的未排序数组中添加元素

  class insertion {

  //fuction to insert a given key in the array.
  //this function return n + 1 
  //if isertion is successful , else return n
      static int insertSorted(int arr[] , int n , int key , int capacity) {

          //can not insert more elements if n is more
          //than or equal capacity
          if(n >= capacity) {
              return n;
          
             }  
               
         arr[n] = key;

         return (n + 1);                     

   }

  public static void main (String args[]) {
     int arr[] = new int[20]       
     arr[0] = 12;          
     arr[1] = 16;
     arr[2] = 20;
     arr[3] = 40;
     arr[4] = 50;
     arr[5] = 70;
   
    int capacity = 20;
    int n = 6;       
    int i , key = 26;
     
   System.out.print("before insertion: ");  
    for(i = 0; i < n; i++) {
        // before inserting
        System.out.print(arr[i] , "  ");

      }

    // inserting key
    n = insertSorted(arr , n , key , capacity); 
    System.out.print(\n After inserting: " );

        for(i = 0; i < n; i++) {
            //after inserting
            System.out.print(arr[i] , " "); 

         }
    
   }



}
© www.soinside.com 2019 - 2024. All rights reserved.