簡體   English   中英

Java中的可變大小數組初始化

[英]Variable-sized Array Initialization in Java

我在Java中有一個整數數組,初始化如下:

public int MyNumbers[] = {0,0,0,0};

但是,我想將數組初始化為可變長度的零。

private int number_of_elements = 4;
public int MyNumbers[] = {0} * number_of_elements; // ????

我不知道怎么做這個來自C的Java新手。有什么建議嗎?

編輯

我知道我可以使用for循環,但我希望有一個簡單的方法來做到這一點。

int[] myNumbers = new int[size];
Arrays.fill(myNumbers, 0);

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html

int[] MyNumbers = new int[number_of_elements];

或者,您可以使用ArrayList這樣您就不必事先擔心大小。 它會在需要時動態擴展內部數組。

List<Integer> numbers = new ArrayList<Integer>();
numbers.add(0);
numbers.add(2);
// ...

這是一個教程,可以了解有關Collections API的更多信息, ArrayList是其中的一部分。

int[] MyNumbers = new int[number_of_elements];

由於這是一個int數組,因此數組元素將自動獲取Java中0 int的默認值。

如果這是一個Integer對象數組,那么在創建它之后必須填充數組,因為對象引用的默認值為null 要在Object數組中設置默認值,您可以執行以下操作:

Integer[] MyNumbers = new Integer[number_of_elements];
java.util.Arrays.fill(MyNumbers, new Integer(0));

當然可以使用相同的技術將int數組初始化為非零值,如下所示:

int[] MyNumbers = new int[number_of_elements];
java.util.Arrays.fill(MyNumbers, 1);

如果您正在尋找與C中的Memset類似的東西,我認為沒有。 如果你看看Javadoc,Arrays.fill實現似乎與for循環相同。

但是,我遇到了這篇討論相同問題的文章http://www.searchenginecaffe.com/2007/03/how-to-quickly-reset-value-of-java.html似乎使用system.arraycopy是你的更好的解決方案,這是你可以使用的功能(從鏈接復制)

public static void bytefill(byte[] array, byte value) {
 int len = array.length;
 if (len > 0)
 array[0] = value;
  for (int i = 1; i < len; i += i) {
    System.arraycopy( array, 0, array, i, ((len - i) < i) ? (len - i) : i);
 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM