如何在数组中插入一系列元素?

时间:2011-12-23 12:31:56

标签: java arrays

如何在数组中插入一系列元素

在数组中插入一个元素的当前代码如下:

public static void getArrayElement()
{

    try
    {
        if(initialSize==1)
        {
            //Get the user input
            System.out.print("Enter the element: ");
            getElement = key.nextInt();

            //Assign the user input to the array
            for(int i=0; i<index; i++)
            {
                array[i] = getElement;
            }

        }

        //If the size of the array is not 1 use this
        else
        {
            //Gets the user input
            System.out.print("Enter the element: ");
            getElement = key.nextInt();

            //Create a new empty array with a new size
            int[] temp = new int[index];

            //Assign the old array into the new array
            for(int j = 0; j < index-1; j++)
            {
                temp[j] = array[j];
            }

            //Change the size of the old array
            array = new int [index];

            //Assign the temporary array into the new array with its new size
            for(int aSize = 0; aSize< array.length; aSize++)
            {
                array[aSize] = temp[aSize];
                int k = array.length;
                array[k-1] = getElement;
            }

            //Pass the array into sortArray method for sorting
            sortArray(array, index);

         }

            //Increment the index and initialSize
           index++;
           initialSize++;
      }
      catch(InputMismatchException e)
     {
            System.out.println("Invalid Input");
            System.exit(0);
     }

  }

如您所见,上面的代码一次只能插入一个元素。但是,如果我想一次插入一堆元素,我该怎么做?

3 个答案:

答案 0 :(得分:2)

在找到答案之前,最好先了解一下阵列是什么。

  

Array是存储在连续内存中的一组同类元素   位置。

这会限制Arrays在初始化时需要知道大小以从内存中保留足够的空间。这使得在父数组中根本不可能插入。为此,您必须执行arraycopy或创建具有不同大小的新数组。

例如,

int[] array = new int[10]; //Initializes an integer array of size 10.
for(int i=0;i<10;i++){
     array[i] = i;
}//stores values from 0 to 9.

现在,如果您打算在开头插入一个或'n'元素,则必须分别创建一个大小为“prev array size 1”或“prev array + n”的新数组。并执行数组复制,然后在开始时插入。

因此,如果您希望动态对象为您执行此操作(插入一个,批量插入),则必须定义阵列可以容纳的自定义容量。然后你必须根据你的偏好增加容量。

开发此问题,您将重新发明Java ArrayList。所以最好在你的情况下使用它。

答案 1 :(得分:1)

如果keyScanner,您可以这样做:

while( key.hasNextInt() ) {
  int i = key.nextInt();
  //do with i whatever you want
}

我还建议使用列表而不是数组。然后将列表传递给Collections.sort(list)以保持排序。

虽然列表只允许您添加对象,但您可以使用自动装箱,并在插入时将int转换为Integer

另外还有支持原始列表的库 - 例如,Google Guava和Apache Commons应该提供一些。

另一个替代方案可能是像Apache Common的TreeBag这样的排序集合,它允许您将多个重复项添加到排序结构中。

答案 2 :(得分:0)

您想将temp的内容复制到数组中。您最多可以通过两个步骤实现此目标

if (temp.length > array.length) array = new int[temp.length]; System.arraycopy(temp, 0, array, 0, temp.length) ;