Ich muss dynamische Array mit in Java finden. Ich weiß, ich Arraylist oder Liste verwenden können, aber ich kann sie jetzt verwenden, habe ich wirklich Mühe darüber zu finden, aber ich konnte nicht finden, wie nicht statisch verwenden (dynamisch) Array ohne Kollektionen dankJava nicht-statische Array
Antwort
Arrays haben eine feste Länge in Java. Es gibt keinen Weg dahin.
Wenn Sie eine N
hinzufügen möchten: te Element in ein Array, arr
mit Länge N-1
dann musst du
- ein neues Array erstellen.
- Kopieren Sie den Inhalt des alten Arrays in das neue Array
- Ersetzen Sie alle Verweise auf das alte Array mit Verweisen auf das neue Array.
In Code entsprechen diese Schritte
int[] newArr = new int[N];
System.arraycopy(arr, 0, newArr, 0, arr.length);
arr = newArr;
oder, etwas kürzer durch Arrays.copyOf
von Java unter Verwendung von 6:
int[] newArr = Arrays.copyOf(arr, N);
arr = newArr;
beste Lösung +1 –
Es bietet dynamische Array mit? – engineer
Nein. Es * ersetzt * das alte Array durch ein neues Array, das länger ist. In Java gibt es kein dynamisches Array. Wenn Sie die Collections-API nicht verwenden können, schlage ich vor, dass Sie eine eigene Listenklasse schreiben, die diese Funktionalität bietet. – aioobe
Normalen Arrays in Java sind nicht dynamisch, so dass, wenn Sie wollen Ändern Sie die Größe des Arrays, Sie müssen eine neue erstellen und den Inhalt der vorherigen in sie kopieren.
können Sie tun das, Arrays#copyOf
Methode zu erstellen und kopieren Sie sie auf einfache Art und Weise:
int[] myNewIntArray = Arrays.copyOf(oldIntArray, newArraySize);
Es bietet dynamische Verwendung? – engineer
Nein, dies ist nur eine bequeme Möglichkeit, ein neues Array zu erstellen und den Inhalt in einer Zeile zu kopieren. – MByD
Ich muss Elemente aus nicht-festen Größe Array erstellen und löschen, deshalb brauche ich wie ein dynamisches Array – engineer
Sie sie einfach so vergeben:
int[] array = new int[17];
Sie können Ihre eigene dynamische Array implementieren. Erstellen Sie ein Array der Größe 1 (oder n, wenn eine anfängliche Größe bereitgestellt wird), verdoppeln Sie dann die Größe und kopieren Sie vorhandene Elemente, sobald sie die Kapazität erreicht haben.
Und dies wird eine amortisierte Kosten von 3 pro Operation haben, 3n für n Elemente, was bedeutet, dass Sie das in o (n) Zeit beibehalten können.
Eine sehr einfache naive Implementierung (für int-Array) wäre:
class DynamicIntArray
{
private int capacity;
private int[] array;
private int size = 0;
public DynamicIntArray()
{
this(1);
}
public DynamicIntArray(int capacity)
{
this.capacity = capacity;
array = new int[this.capacity];
}
public void add(int a)
{
if (size == capacity)
resize();
array[size] = a;
size++;
}
private void resize()
{
capacity *= 2;
array = Arrays.copyOf(array, capacity);
}
// Implement the rest
}
Hier ist, wie Sie es verwenden würde:
DynamicIntArray dynamicArray = new DynamicIntArray();
dynamicArray.add(1);
dynamicArray.add(2);
dynamicArray.add(3);
Wenn Sie es ändern Generika zu verwenden, können Sie es verwenden für alles, nicht nur für ganze Zahlen.
Sie können eine Sammlung verwenden, bis das Array vom Typ benötigt wird, und dann Ihr Array mithilfe der Funktion Collection.toArray() abrufen.
ich denke, es ist nicht geeignet mit, aber danke – engineer
Sie könnten dynamisches Verhalten nachahmen, indem Sie ein neues Array erstellen, wenn es fast voll ist, z. B. ein neues Array mit der doppelten Länge des ursprünglichen Arrays erstellen und alle Elemente kopieren.
danke für Ihre Antwort – engineer
Ich denke, du würdest noch bessere Antworten erhalten, wenn du erklärst, was du zu tun versuchst und warum du Collections nicht benutzen kannst oder willst. Was genau ist das Problem, das Sie versuchen zu lösen?
danke für Ihre Antwort – engineer
- 1. Wie übertragen Sie Java-Array in Java-Array mit Jsp?
- 2. Ein Feldinitialisierer kann nicht auf das nichtstatische Feld verweisen, ASP.NET MVC
- 3. 2D-Array-Frage Java
- 4. MongoDB Java Treiber-Array
- 5. Java Array Erklärung Brackets
- 6. letzte Array in Java
- 7. Java-String in Array
- 8. Iterating durch Array - Java
- 9. Java Array Absteigend sortieren?
- 10. Strukturiertes Array in Java
- 11. Java Multithreading Array Trennen
- 12. Java Prozess Array parallel
- 13. Java String Array Splitting
- 14. java Druck char-Array
- 15. Java-Array-Initialisierung
- 16. Java unveränderbar Array
- 17. Java Jagged Array
- 18. Java-Objekt-Array-Initialisierung
- 19. Java mehrdimensionales Array Instanziierung
- 20. Java Unbegrenzte Array
- 21. Java-Int ... Array-Notation
- 22. wie Java-Array Speichernutzung
- 23. java Arrays.sort 2d Array
- 24. Java Array zerstören
- 25. Java automatisch wachsendes Array
- 26. Array-Größe in Java
- 27. Mehrdimensionale Array-Manipulation - Java
- 28. Array/Methode/Java Hilfe
- 29. java random array
- 30. Java Array in Jruby
Warum müssen Sie ein dynamisches Array erstellen? Warum können Sie keine Sammlungen verwenden? Was versuchst du zu machen? Wie versagst du? – npinti
Es ist mein Projekt und ich verkrafte dies etwa 6 Tage und kann immer noch nicht finden, wie man dynamische Arrays ohne Sammlungen erstellt, nur Sammlungen sind verboten – engineer
Wenn Sie Sammlungen nicht verwenden können, müssen Sie jedes Mal ein Array erstellen füge etwas hinzu, wie unten vorgeschlagen, oder erstelle beim ersten Mal ein sehr großes Array und füge weitere Dinge hinzu. Wenn ich bei dir wäre würde ich mit der ersten Wahl gehen. – npinti