Ich habe mich gefragt, wie ich ein Integer-Array so initialisieren kann, dass sich Größe und Werte während der Ausführung meines Programms ändern. Irgendwelche Vorschläge?
Ich habe mich gefragt, wie ich ein Integer-Array so initialisieren kann, dass sich Größe und Werte während der Ausführung meines Programms ändern. Irgendwelche Vorschläge?
Antworten:
Ja: Verwenden Sie ArrayList .
In Java haben "normale" Arrays eine feste Größe. Sie müssen ihnen eine Größe geben und können sie nicht erweitern oder verkleinern. Um die Größe zu ändern, müssen Sie ein neues Array erstellen und die gewünschten Daten kopieren - was ineffizient und für Sie schmerzhaft ist.
Glücklicherweise gibt es alle Arten von integrierten Klassen, die gemeinsame Datenstrukturen implementieren, sowie andere nützliche Tools. Sie sollten die Java 6-API auf eine vollständige Liste überprüfen .
Eine Einschränkung: ArrayList kann nur Objekte (z. B. Ganzzahlen) enthalten, keine Grundelemente (z. B. Ints). In den meisten Fällen erledigt Autoboxing / Autounboxing dies stillschweigend für Sie, aber je nachdem, was Sie tun, kann es zu seltsamen Verhaltensweisen kommen.
size
des Programms nicht entsprechend. Es erhält die Größe, in der es sich gerade befindet, size
wenn diese Zeile ausgeführt wird.
null
. Irgendwelche Ideen warum?
Arrays in Java haben eine feste Größe. Was Sie brauchen, ist eine ArrayList, eine von mehreren äußerst wertvollen Sammlungen, die in Java verfügbar sind.
Anstatt
Integer[] ints = new Integer[x]
Sie nutzen
List<Integer> ints = new ArrayList<Integer>();
Um dann die von Ihnen verwendete Liste ints.add(y)
und ints.remove(z)
viele andere nützliche Methoden zu ändern, finden Sie diese in den entsprechenden Javadocs.
Ich empfehle dringend, die in Java verfügbaren Collections-Klassen zu studieren, da sie sehr leistungsfähig sind und Ihnen viele integrierte Funktionen bieten, die Java-Neulinge normalerweise unnötig neu zu schreiben versuchen.
List<Integer>
statt ArrayList<Integer>
?
Arrays haben nach der Instanziierung eine feste Größe. Sie können stattdessen eine Liste verwenden.
Autoboxing macht eine Liste ähnlich wie ein Array nutzbar. Sie können einfach int-Werte einfügen:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Ich bin mit den vorherigen Antworten nicht einverstanden ArrayList
, da ArrayList
es sich nicht um ein dynamisches Array handelt, sondern um eine Liste, die von einem Array unterstützt wird. Der Unterschied besteht darin, dass Sie Folgendes nicht tun können:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Sie erhalten eine IndexOutOfBoundsException, da sich an dieser Position noch kein Element befindet, obwohl das Hintergrundarray eine solche Hinzufügung zulassen würde. Sie müssen also eine benutzerdefinierte erweiterbare Array-Implementierung verwenden, wie von @ randy-lance vorgeschlagen
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
Es wird empfohlen, List zu verwenden, um mit kleinen Größen umzugehen.
Wenn Sie eine große Anzahl von Nummern haben, verwenden Sie NIEMALS List und Autoboxing.
Liste <Integer> Liste
Für jedes einzelne Int wird automatisch eine neue Ganzzahl erstellt. Sie werden feststellen, dass es langsam wird, wenn die Liste größer wird. Diese Ganzzahlen sind unnötige Objekte. In diesem Fall wäre es besser, eine geschätzte Größe zu verwenden.
int[] array = new int[ESTIMATED_SIZE];
Wie wäre es List
stattdessen mit einem ? Beispielsweise,ArrayList<integer>
Sie können die Größe eines Arrays nicht ändern. Sie können jedoch ein neues Array mit der richtigen Größe erstellen und die Daten vom alten Array in das neue kopieren.
Am besten verwenden Sie jedoch IntList von jacarta commons. ( hier )
Es funktioniert genau wie eine Liste, benötigt jedoch weniger Speicherplatz und ist effizienter, da es Ints speichert, anstatt Wrapper-Objekte über Ints zu speichern (das ist die Integer-Klasse).
Ich habe diese Frage beantwortet und nein, Sie brauchen keine Arrayliste oder etwas anderes. Dies war eine Aufgabe und ich habe sie abgeschlossen, damit sich die Arrays vergrößern können. Hier ist der Link Wie man Java Dynamic Array benutzt und hier ist der Link für meine Frage, die ich mit Java Dynamic Arrays beantwortet habe
int[] array = new int[size];
size
ist eine Variable, aber die Länge eines Arrays muss festgelegt werden, stimmt's? @Lord Torgamus