Wie deklariere und initialisiere ich ein Array in Java?
Antworten
Zu viele Anzeigen?Nehmen Sie den primitiven Typ int
zum Beispiel. Es gibt mehrere Möglichkeiten, um zu deklarieren und int
Array:
int[] i = new int[capacity];
int[] i = new int[] {value1, value2, value3, etc};
int[] i = {value1, value2, value3, etc};
wobei Sie in all diesen Fällen Folgendes verwenden können int i[]
代わりに int[] i
.
Bei der Reflexion können Sie Folgendes verwenden (Type[]) Array.newInstance(Type.class, capacity);
Beachten Sie, dass in den Methodenparametern, ...
zeigt an. variable arguments
. Im Grunde genommen ist jede Anzahl von Parametern in Ordnung. Es ist einfacher, es mit Code zu erklären:
public static void varargs(int fixed1, String fixed2, int... varargs) {...}
...
varargs(0, "", 100); // fixed1 = 0, fixed2 = "", varargs = {100}
varargs(0, "", 100, 200); // fixed1 = 0, fixed2 = "", varargs = {100, 200};
Innerhalb der Methode, varargs
wird wie eine normale int[]
. Type...
kann nur in Methodenparametern verwendet werden, also int... i = new int[] {}
wird nicht kompiliert.
Beachten Sie, dass bei der Übergabe einer int[]
zu einer Methode (oder einer anderen Type[]
), können Sie den dritten Weg nicht verwenden. In der Anweisung int[] i = *{a, b, c, d, etc}*
geht der Compiler davon aus, dass die {...}
bedeutet eine int[]
. Aber das liegt daran, dass Sie eine Variable deklarieren. Wenn Sie ein Array an eine Methode übergeben, muss die Deklaration entweder new Type[capacity]
o new Type[] {...}
.
Mehrdimensionale Arrays
Mehrdimensionale Arrays sind viel schwieriger zu handhaben. Im Wesentlichen ist ein 2D-Array ein Array von Arrays. int[][]
bedeutet eine Reihe von int[]
s. Der Schlüssel ist, dass ein int[][]
wird deklariert als int[x][y]
ist der maximale Index i[x-1][y-1]
. Im Wesentlichen ist ein rechteckiges int[3][5]
ist:
[0, 0] [1, 0] [2, 0]
[0, 1] [1, 1] [2, 1]
[0, 2] [1, 2] [2, 2]
[0, 3] [1, 3] [2, 3]
[0, 4] [1, 4] [2, 4]
Array ist eine fortlaufende Liste von Elementen
int item = value;
int [] one_dimensional_array = { value, value, value, .., value };
int [][] two_dimensional_array =
{
{ value, value, value, .. value },
{ value, value, value, .. value },
.. .. .. ..
{ value, value, value, .. value }
};
Wenn es ein Objekt ist, dann ist es dasselbe Konzept
Object item = new Object();
Object [] one_dimensional_array = { new Object(), new Object(), .. new Object() };
Object [][] two_dimensional_array =
{
{ new Object(), new Object(), .. new Object() },
{ new Object(), new Object(), .. new Object() },
.. .. ..
{ new Object(), new Object(), .. new Object() }
};
Im Falle von Objekten müssen Sie es entweder zuordnen null
um sie zu initialisieren mit new Type(..)
Klassen wie String
y Integer
sind Sonderfälle, die wie folgt behandelt werden
String [] a = { "hello", "world" };
// is equivalent to
String [] a = { new String({'h','e','l','l','o'}), new String({'w','o','r','l','d'}) };
Integer [] b = { 1234, 5678 };
// is equivalent to
Integer [] b = { new Integer(1234), new Integer(5678) };
Im Allgemeinen können Sie Arrays erstellen, die M
dimensional
int [][]..[] array =
// ^ M times [] brackets
{{..{
// ^ M times { bracket
// this is array[0][0]..[0]
// ^ M times [0]
}}..}
// ^ M times } bracket
;
Es ist erwähnenswert, dass die Erstellung eines M
dimensionalen Array ist platzraubend. Denn wenn Sie ein M
dimensionales Array mit N
in allen Dimensionen, Die Gesamtgröße des Arrays ist größer als N^M
da jedes Feld eine Referenz hat und es in der M-Dimension ein (M-1)-dimensionales Feld von Referenzen gibt. Die Gesamtgröße ist wie folgt
Space = N^M + N^(M-1) + N^(M-2) + .. + N^0
// ^ ^ array reference
// ^ actual data
Deklarieren eines Arrays von Objektreferenzen:
class Animal {}
class Horse extends Animal {
public static void main(String[] args) {
/*
* Array of Animal can hold Animal and Horse (all subtypes of Animal allowed)
*/
Animal[] a1 = new Animal[10];
a1[0] = new Animal();
a1[1] = new Horse();
/*
* Array of Animal can hold Animal and Horse and all subtype of Horse
*/
Animal[] a2 = new Horse[10];
a2[0] = new Animal();
a2[1] = new Horse();
/*
* Array of Horse can hold only Horse and its subtype (if any) and not
allowed supertype of Horse nor other subtype of Animal.
*/
Horse[] h1 = new Horse[10];
h1[0] = new Animal(); // Not allowed
h1[1] = new Horse();
/*
* This can not be declared.
*/
Horse[] h2 = new Animal[10]; // Not allowed
}
}