如何在循环内增加数组的大小

时间:2012-12-08 17:23:33

标签: java arrays loops increment

我有这个bubblesort代码,我正在执行运行时分析,记录对数组进行排序所需的时间。我想知道是否有任何方法可以使用循环增加数组的大小?因为目前我手动一次递增100个,我需要达到5000的数组大小。

public class BubbleSortworking{
public static void main (String[] args) {
    Random rand = new Random();
    int myArray[] = new int[100];  //How to increment this using a loop
    int count, count2;
    count2 = 2;   //amount of times to run the loop

    //repeats the bubble sort, while also producing new arrays each time
    for (count = 0; count < count2; count++){
        for (int i = 0; i < myArray.length; i++){

            myArray[i] = rand.nextInt(100) + 1;  //produce numbers between 1 - ?
            //System.out.print(myArray[i] + ", ");   //displays unsorted array
        }

        bubble(myArray);

        // uncomment below 2 lines to prove each new sorted array cycle is unique 
        //for (int i = 0; i < myArray.length; i++)
        //  System.out.print(myArray[i] + ", ");
    }
}

public static void bubble(int myArray[]){
    int temp;
    long start = System.nanoTime();
    //System.out.println("start " + start);

    //for (count = 0; count < count2; count++){
    for (int i=0; i < myArray.length - 1; i++) {
        for(int j=myArray.length - 1; j > i; j--) {
            if (myArray[j] < myArray[j-1]){
                temp = myArray[j];
                myArray[j] = myArray[j-1];
                myArray[j-1] = temp;
            }
        }
    }

    long end = System.nanoTime();
    System.out.println(end - start);
    //System.out.println("elapsed time " + (end - start));


}

}

4 个答案:

答案 0 :(得分:1)

不能一旦创建就无法更改数组的大小。您要么必须分配比您认为需要的更大的分配,要么接受必须重新分配的开销需要增长。当它发生时你必须分配一个新数据并将数据从旧数据复制到新数据。

答案 1 :(得分:1)

您需要使用ArrayList,它会为您执行此操作,但需要额外的开销。

或者,您可以在开始之前将数组分配为大小5000,并记录到目前为止在变量中使用的元素数量(而不是依赖于array.length)

或者,您可以通过创建一个更大的新数组并将所有元素复制到它(System.arrayCopy(..))以及放入新数组来调整数组的大小。

答案 2 :(得分:0)

rizon的答案是正确的,你无法改变数组的大小。顺便说一句,你没有在哪里重新创建阵列,也没有看到你在哪里处理5000个元素。如果您担心处理时间,则不希望重新创建/调整数组大小,因为这样效率非常低。你会想要一个不同的解决方案。

答案 3 :(得分:0)

这可能对您有所帮助

int[] intA = new int[100];
int sizeToIncrement = 100;
for(int i=0;i<5000;i++) {
   if(i== intA.length ) {
      intA = Arrays.copyOf(intA, intA.length + sizeToIncrement);
   }
   intA[i] = i;
}