Java dynamische Array-Größen?
Habe ich eine Klasse - xClass, dass ich laden will in ein array von xClass so habe ich die Erklärung:
xClass mysclass[] = new xClass[10];
myclass[0] = new xClass();
myclass[9] = new xClass();
Aber ich weiß nicht, ob ich müssen 10. Ich muss 8 oder 12 oder eine andere Zahl für diese Angelegenheit. Ich will nicht wissen, erst zur Laufzeit.
Kann ich die Anzahl der Elemente in einem array on-the-fly?
Wenn ja, wie?
InformationsquelleAutor der Frage Paul | 2009-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, Sie können nicht ändern die Größe eines Arrays wird einmal erstellt. Man muss entweder reservieren Sie größer, als Sie denken, dass Sie benötigen, oder übernehmen Sie den Aufwand für die Umverteilung, die es braucht, um zu wachsen in der Größe. Wenn es funktioniert musst du reservieren Sie eine neue ein und kopieren die Daten von der alten auf die neue:
Wenn Sie sich in dieser situation würde ich empfehlen, mit der Java-Sammlungen statt. Insbesondere
ArrayList
im wesentlichen umschließt ein array und kümmert sich um die Logik für den Anbau der array wie gewünscht:In der Regel eine
ArrayList
ist eine bessere Lösung, um ein array sowieso aus mehreren Gründen. Für eine Sache, die arrays sind mutable. Wenn Sie eine Klasse, die dies tut:hast du ein problem geschaffen, als ein Anrufer können Ihre privaten Daten-Mitglied, das führt zu allen Arten von defensiven kopieren. Vergleichen Sie diese mit der Liste version:
InformationsquelleAutor der Antwort cletus
In java-array-Länge ist festgelegt.
Können Sie eine Liste verwenden, um halten Sie die Werte, und rufen Sie das
toArray
Methode, wenn nötigSiehe das folgende Beispiel:
InformationsquelleAutor der Antwort OscarRyz
Wie schon andere gesagt haben, Sie können nicht ändern der Größe einer vorhandenen Java-array.
ArrayList ist die nächste, die standard-Java hat sich zu einer dynamischen Größe array. Es gibt jedoch einige Dinge, über ArrayList (eigentlich die List-Schnittstelle), die nicht "array-like". Zum Beispiel:
[ ... ]
index eine Liste. Verwenden Sie dieget(int)
undset(int, E)
Methoden.set(15, foo)
.add
insert
undremove
Methoden.Wenn Sie etwas mehr array-like, benötigen Sie für die Gestaltung Ihres eigenen API. (Vielleicht könnte jemand Glockenspiel mit einer vorhandenen Drittanbieter-Bibliothek ... ich konnte nicht finden, dass man mit 2 Minuten "Forschung" mit Hilfe von Google 🙂 )
Wenn Sie nur wirklich brauchen, um ein array, das wächst als Sie initialisierendann ist die Lösung so etwas wie dieses.
InformationsquelleAutor der Antwort Stephen C
Legen Sie die Anzahl der Elemente, die alles, was Sie wollen zu der Zeit Sie es schaffen:
Dann können Sie initialisieren die Elemente in einer Schleife. Ich vermute, dass dies ist, was Sie brauchen.
Wenn Sie brauchen, um hinzuzufügen oder zu entfernen Elemente, um das array nach dem erstellen, dann würden Sie eine
ArrayList
.InformationsquelleAutor der Antwort newacct
Können Sie verwenden ArrayList:
...
InformationsquelleAutor der Antwort Pascal9x
Ja, wickeln Sie es und verwenden Sie die Collections-framework.
Verwenden Sie dann Liste.toArray (), wenn notwendig, oder nur die Iteration über diese Liste.
InformationsquelleAutor der Antwort Jé Queue
Als andere user sagen, Sie müssen wahrscheinlich eine Implementierung von java.util.Liste.
Wenn, aus irgendeinem Grund, werden Sie schließlich müssen ein array, können Sie zwei Dinge tun:
Verwenden Sie eine Liste, und konvertieren Sie Sie dann in ein array mit myList.toArray()
Verwenden Sie ein array einer bestimmten Größe. Wenn Sie brauchen, mehr oder weniger Größe, können Sie es ändern mit java.util.Arrays Methoden.
Beste Lösung hängt von Ihrem problem 😉
InformationsquelleAutor der Antwort sinuhepop
Empfehle ich die Verwendung von Vektoren anstelle. Sehr einfach zu bedienen und hat viele vordefinierte Methoden für die Umsetzung.
um ein element hinzuzufügen, verwenden Sie einfach:
In der (5,2) den ersten 5 ist die ursprüngliche Größe des Vektors. Wenn Sie mehr als die ursprüngliche Größe,der Vektor wird wachsen, von 2 Orten. Wenn es mehr als einmal, dann wird es wieder zu erhöhen, indem 2 Plätze und so weiter.
InformationsquelleAutor der Antwort Shashank Raghunath
Arrays.copyOf()
Methode hat viele Optionen, um das problem zu beheben Array mit der Länge steigen dynamisch.Java-API
InformationsquelleAutor der Antwort man.2067067
Wo Sie erklären, die myclass[] array als :
einfach übergeben Sie als argument die Anzahl der XClass-Elemente, die Sie benötigen. An diesem Punkt wissen Sie, wie viele Sie benötigen? Durch deklarieren der array mit 10 Elementen, die Sie nicht deklarieren, 10 XClass Objekte, die man erstellt einfach ein array mit 10 Elementen vom Typ xClass.
InformationsquelleAutor der Antwort Amir Afghani
Es ist eine gute Praxis, erhalten Sie den Betrag, den Sie brauchen, um zu speichern, dann erst das array initialisiert.
würden Sie beispielsweise den Benutzer auffordern, wie viele Daten er speichern müssen und dann initialisieren Sie es, oder Abfrage die Komponente oder das argument, wie viele Sie benötigen, zu speichern.
wenn Sie möchten, dass ein dynamisches array, das Sie verwenden könnte
ArrayList()
und verwendenal.add();
- Funktion halten Sie das hinzufügen, dann übertragen Sie es auf einen festen array.dies ist redundant, aber nur um zu zeigen Sie auf die Idee,
ArrayList
kann Objekte enthalten im Gegensatz zu anderen primitiven Datentypen und sind sehr leicht zu manipulieren, entfernen Sie etwas aus der Mitte ist einfach wie gut, völlig dynamisch.gleiche mitList
undStack
InformationsquelleAutor der Antwort bakz
Java-Array-Größen sind fest , Sie können keine dynamischen Arrays wie in C++.
InformationsquelleAutor der Antwort
Ich weiß nicht, ob Sie können die Größe ändern zur Laufzeit, sondern nehmen Sie die Größe zur Laufzeit. Versuchen Sie es mit diesem code:
diese weist das array-Größe zu sein, die der angegebenen Laufzeit in x.
InformationsquelleAutor der Antwort Maranatha
Hier ist eine Methode, die nicht mit ArrayList. Der Benutzer legt die Größe und fügen Sie eine do-while-Schleife für die Rekursion.
InformationsquelleAutor der Antwort wallace_stev
In Java-Array-Größen sind immer eine Feste Länge, Aber es ist Weg, in dem Sie Dynamisch erhöhen Sie die Größe des Array zur Laufzeit Selbst
Dies ist die am meisten "genutzt" als auch bevorzugte Art und Weise, es zu tun-
Im obigen code sind wir initialisieren einen neuen temp [] - array, mit einer for-Schleife, zum initialisieren der Inhalt des temp mit dem Inhalt der original-array, dh. stck[]. Und dann wieder kopieren es zurück zum original, gibt uns ein neues array der neuen GRÖßE.
Kein Zweifel, es erzeugt eine CPU-Overhead durch das erneute initialisieren ein array mit for-Schleife wiederholt. Aber man kann immer noch verwenden, und implementieren es in Ihrem code.
Für die best-practice-verwenden "Verlinkte Liste" anstelle von Arrays, wenn Sie wollen, dass die Daten gespeichert werden dynamisch im Speicher eine variable Länge.
Hier ist eine Echtzeit-Beispiel auf Basis Dynamischer Stacks zu ERHÖHEN, ARRAY-GRÖßE zur Laufzeit
Datei-name: DStack.java
Datei-name: Exec.java
(mit der main-Klasse)
Hoffe, das löst deine Anfrage.
InformationsquelleAutor der Antwort Jatin Chauhan
Ja, wir können es tun auf diese Weise.
InformationsquelleAutor der Antwort jyoti bhushan
Seit ArrayList nimmt zu viel Speicher, wenn ich Sie brauche array von primitiven Typen, die ich lieber mit IntStream.- generator() für die Erzeugung von int-Arrays (Sie können auch LongStream und DoubleStream Bauherren).
Beispiel:
Anmerkung: seit Java 8.
InformationsquelleAutor der Antwort Bosko Popovic
Können Sie einige Sache
InformationsquelleAutor der Antwort Chinthaka Devinda