2014-02-10 175 views
0

我有以下代碼將整數和根據位置存儲在布爾數組中。我有一個方法包括,允許用戶輸入更多的數字到數組中,但如果數字大於數組大小,那麼我需要增加大小。我知道,只要修改了每個位置的內容,就不能對數組做很多事情。有沒有一種快速的方法可以讓它更大,或者我可以使用數組列表來保持數組大小的變化?Java增加數組大小

public class ISet { 
    public int max; 
    boolean[] numArray; 


    ISet(int a) { 
     this.size = a; 
     this.numArray = new boolean[size]; 

    } 

    public void include(int n) { 
     if (n > size) { 
      this.size = n; 
      numArray[n]=true; 

     } 
     else 

      numArray[n]=true; 


     } 
+1

數組一次分配的內存不能調整大小。這需要創建一個所需大小的新數組,並將原始數組的內容複製到新創建的數組中,可能使用'java.lang.System.arraycopy(...);' – Tiny

+0

這是什麼目的?請不要在索引「number」處存儲「true」,而應考慮將「number」存儲在list/set/map中,並且如果列表中包含「number」爲「number」爲真,否則爲false。 – Martin

+1

看看這裏; http://docs.oracle.com/javase/tutorial/collections/查看哪個集合最適合您。 – Martin

回答

1

您可以簡單地使用ArrayList,但它必須是ArrayList<Boolean>而不是布爾(原始數據類型)。可能是最簡單的解決方案。

另一種選擇是創建一個新的更大的數組,並在超出當前數組的大小時將當前數組中的每個元素複製到新數組中。

1

您應該使用ArrayList。

普通數組在Java中具有固定大小。

+0

我以爲我可能不得不。我可以使用一組布爾值還是使用python? – Softey

+0

Java集在這種情況下不適合,因爲它的目的是包含獨特的元素。 – OlivierLi

2

如果你想讓自己變得更大,你可以使用Arrays.copyOf(numArray, newLength),它會將你的數組複製到一個新的指定長度的數組中,如果新的長度比原來的長度更長,那麼會在最後添加一些錯誤。

否則,您可以使用ArrayList。

0

對於「正常」代碼,您應該使用ArrayList來代替。

對於使用超大型數組的應用程序,該數組需要比ArrayList少得多的內存,因爲對象需要比原型至少多4倍(16字節)的內存4倍。

對於這種特殊情況,您可以使用Arrays.copyOf()將內容複製到一個新的更大的陣列中。 另請參見src cocde ArrayList.java