如何在数组中插入一系列元素
在数组中插入一个元素的当前代码如下:
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);
}
}
如您所见,上面的代码一次只能插入一个元素。但是,如果我想一次插入一堆元素,我该怎么做?
答案 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)
如果key
是Scanner
,您可以这样做:
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) ;