2010-01-07 8 views
14

Ich habe eine Reihe von ganzen Zahlen in Java, die initialisiert wird, wie folgt:Variable-sized Array Initialisierung in Java

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

Ich möchte, initialisiert jedoch das Array zu einem längenveränderlichen Anzahl von Nullen.

Ich bin ahnungslos, wie dies zu tun ist neu zu Java kommen von C. Irgendwelche Vorschläge?

EDIT

Ich weiß, dass ich eine for Schleife verwenden könnte, aber ich hoffe, es eine einfache Möglichkeit, es zu tun war.

Antwort

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

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

+0

Danke, Alter! Habe ich recht, wenn ich annehme, dass die Importzeile nur 'java.util.Arrays' ist? – daveslab

+0

Yup. Eine Sache zu beachten ist jedoch, dass gemäß der Quelle von Arrays.java (JDK 6) die obige Funktion tatsächlich eine for-Schleife verwendet. Aber eines Tages könnte es genauso leicht dieses Verhalten ändern, um etwas niedrigeres Niveau zu verwenden, wie zum Beispiel ein Memset (über JNI). – laginimaineb

+0

Ich würde der JVM vertrauen, diesen Code durch faaaaaast code zu ersetzen.In der Regel werden Schleifen von der JVM abgerollt, vielleicht sogar zu einem Memset optimiert. Optimieren Sie in Java niemals auf Codeebene! – akuhn

5
int[] MyNumbers = new int[number_of_elements]; 
+1

Ich denke, dass die Null in dem Beispielcode als ein Beispiel gemeint ist, während dieses Einzeiler das mit Nullen gefüllte Array erzeugt, es dem OP jedoch immer noch nicht erlaubt, es mit einem anderen, willkürlichen Wert zu füllen. – laginimaineb

5

Alternativ können Sie ArrayList so verwenden, dass Sie vorher nicht über die Größe kümmern müssen. Es wird das interne Array bei Bedarf dynamisch erweitern.

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

Here's a tutorial mehr über die Sammlungen API zu lernen, die ArrayList Teil ist.

+1

+1 Für die Verwendung von ArrayList. Genau das habe ich mir gedacht. –

+0

+1 "Bevorzugten Listen über Arrays" – helpermethod

2
int[] MyNumbers = new int[number_of_elements]; 

Da es sich um eine Reihe von int den Array-Elementen den Standardwert für int ist in Java von 0 automatisch erhalten.

Wenn dies ein Array von Integer Objekten wäre, müssten Sie Array füllen, nachdem Sie es erstellt haben, da der Standardwert für eine Objektreferenz null ist. Standardwerte in einer Object Array setzen Sie folgendes tun:

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

Die gleiche Technik könnte natürlich verwendet werden, um die int Array Werte zu initialisieren ungleich Null wie so:

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

Nitpick: Wenn Sie das Integer-Array füllen, sollten Sie wahrscheinlich "Integer.valueOf()" anstelle von "New Integer()" verwenden, da dies den Integer-Cache verwenden wird (siehe http : //tech.puredanger.com/2007/02/01/valueof/ für eine interessante Lektüre) – laginimaineb

0

Wenn Du suchst etwas ähnliches wie Memset in C, ich glaube nicht, dass es eins gibt. Die Arrays.fill-Implementierung scheint dieselbe zu sein wie eine for-Schleife, wenn Sie sich Javadoc ansehen.

aber ich kam in diesem Artikel, der die gleiche Frage diskutiert http://www.searchenginecaffe.com/2007/03/how-to-quickly-reset-value-of-java.html Es scheint, dass System.arraycopy Verwendung ist Ihre bessere Lösung, und dies ist die Funktion, die Sie (kopiert aus dem Link) verwenden können

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); 
} 
}