Java Array-Länge ändern?

t2im

t2im

Neues Mitglied
Hi, ich habe eine Frage und zwar wie kann man beim Erzeugen eines Arrays im Konstruktor die Array-Länge ändern? Also nicht array = new Array [3] sondern, dass man die 3 beim Erzeugen des Arrays ändern kann?

LG
 
JensXF

JensXF

Mitglied
Wenn du durch eine Benutzereingabe meinst dann z.B. so
Java:
Scanner scanner = new Scanner(System.in);
int eingabe = scanner.nextInt();
int[] array = new int[eingabe];
scanner.close();
 
Zuletzt bearbeitet:
M

M.L.

Top Contributor
Weiterhin unterstützt Java auch "dynamische Arrays" in Form von Vector, ArrayList, LinkedList und CopyOnWriteArrayList.
 
temi

temi

Top Contributor
Java:
int size = 10;
int[] arr = new int[size];
Allgemein kannst du eine Variable für die Erzeugung des Arrays verwenden. Wo der Wert darin herkommt ist egal, das kann eine stinknormale Variable sein, der du einen Wert zuweist oder der Parameter einer Methode oder auch der Rückgabewert einer anderen Methode.
Java:
int[] arr = new int[getSize()]; // wir unterstellen mal die Existenz der Methode getSize()...
 
Kirby.exe

Kirby.exe

Top Contributor
Naja ist zwar nicht das effizienteste aber du könntest eine Methode erstellen, welche ein neues Array deiner gewollten Größe erstellt und alle Elemente aus dem alten Array in das neue copieren ;)
 
B

berndoa

Bekanntes Mitglied
Hi, ich habe eine Frage und zwar wie kann man beim Erzeugen eines Arrays im Konstruktor die Array-Länge ändern? Also nicht array = new Array [3] sondern, dass man die 3 beim Erzeugen des Arrays ändern kann?

LG
ich hätte gesagt, indem du als attribut in der klasse int[] array; ganz oben stehen hast.
vorausgesetzt deine klasse kriegt ein int n übergeben als parameter bei der objekterzeugung (aka int n ist der parameter vom konstruktor)
dann würde ich in den konstruktor einfahc ne zeile
array=new int[n]; packen.

bewirkt dass wenn du ein objekt der klasse erzeugst, dieses dann ein attribut array hat was ein int array der länge n ist.

Ansonsten eine shcon vorgegebene länge wieder verändern geht nicht.

müsstest du die variable einem neuen, größeren array zuweisen und ggbfls die wette aus dem lten kleinen array da reinkopieren
 
N

Neumi5694

Top Contributor
Naja ist zwar nicht das effizienteste aber du könntest eine Methode erstellen, welche ein neues Array deiner gewollten Größe erstellt und alle Elemente aus dem alten Array in das neue copieren ;)
Tatsächlich ist das die einzige Möglichkeit.
Arraylist#add macht das intern auch so ähnlich.
Ist das Array zu kurz, wird ein neues - größeres - erstellt, die alten Werte werden reinkopiert, dann der neue.

@ OP
Falls du wirklich auf Teufel Komm raus mit Arrays arbeiten willst (warum keine Listen, die sind doch so viel angenehmer?), dann schau dir diese Methode an:
Java:
System.arraycopy(sourceArray, 0, newBiggerArray, 0, sourceArray.length);
 
N

Neumi5694

Top Contributor
Naja aber die erweitert meist um mehr als nur eine Stelle und diese Operation nicht zu oft durchzuführen, dass sie sehr Laufzeitintensiv ist bei großen ArrayLists ;)
Sei dir dessen mal nicht so sicher.
Java:
  //Aus ArrayList.java
  private Object[] grow() {
        return grow(size + 1);
    }

Step mal in den dritten Aufruf rein.
Java:
    ArrayList<String> s = new ArrayList<>(2);
    s.add("A");
    s.add("B");
    s.add("C");
Am Ende wird elementData eine Größe von 3 haben.
Initialisiert man ArrayList ohne Parameter, hat Elementdata eine Größe von 10 und wird bei Bedarf um 1 erweitert (bei addAll(...) wird natürlich sofort um die notwendige Anzahl erweitert).

Deshalb: ArrayLists nach Möglichkeit immer mit der geschätzten Maximalgröße initialisieren oder per ensureCapacity nachträglich auf die gewünschte Größe setzen.
 
kneitzel

kneitzel

Top Contributor
Da evtl. noch der Hinweis: Das Verhalten hängt natürlich auch von der Version ab. OpenJDK 11 hat das beschriebene Verhalten:

Aber wenn jemand noch Java 8 / OpenJDK 8 verwendet, dann ist das Verhalten anders (wie man es teilweise in älteren Beiträgen findet):
Java:
    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
==> Es wird immer mindestens um 50% erweitert ) oldCapacity >> 1 ist oldCapacity / 2
 
kneitzel

kneitzel

Top Contributor
Das ist auch bei AdoptOpenJDK nicht anders.
Ja, ich würde da auch kein wirkliches Kosten/Nutzen Verhalten sehen, hier Abweichungen vom OpenJDK einzuführen. Zumal da in den Kommentaren der Klasse ganz deutlich steht:

* Each {@code ArrayList} instance has a capacity. The capacity is
* the size of the array used to store the elements in the list. It is always
* at least as large as the list size. As elements are added to an ArrayList,
* its capacity grows automatically. The details of the growth policy are not
* specified beyond the fact that adding an element has constant amortized
* time cost.
(Das kommt jetzt aus den Sourcen, aber als JavaDoc findet sich das natürlich auch direkt in der Dokumentation der Klasse!)

Man sollte sich also auch nie auf irgend eine spezifische Implementation verlassen.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Sei dir dessen mal nicht so sicher.
Java:
  //Aus ArrayList.java
  private Object[] grow() {
        return grow(size + 1);
    }
Das ist nur der Fall, wenn man add mit Index nutzt und am Ende der Liste hinzufügt.

Ansonsten wird ganz normal die Liste um 50% vergrößert, ist auch in deinem Beispiel mit 3 Elementen der Fall.
 
kneitzel

kneitzel

Top Contributor
Das ist nur der Fall, wenn man add mit Index nutzt und am Ende der Liste hinzufügt.
Ich glaube, da täuscht Du Dich.

Ich habe @Neumi5694 so verstanden, dass er an den Code über den Debugger gekommen ist, d.h. er hat wirklich seine add Aufrufe verfolgt.

Das habe ich auch einmal nachgespielt (Wer weiss, was ich da sonst an Code finde in irgendwelchen Repositories :) ) und ich kann das auch bestätigen. Er läuft in das grow() rein was dann eben genau dieses grow(size + 1) aufruft.

Der Code mit den +50% ist auch gar nicht mehr enthalten was ich so gesehen habe.
 
temi

temi

Top Contributor
Der Wert size + 1 legt ja nur die minCapacity fest, nicht die tatsächliche neue Kapazität.

Java:
    private Object[] grow(int minCapacity) {
        return this.elementData = Arrays.copyOf(this.elementData, this.newCapacity(minCapacity));
    }

    private Object[] grow() {
        return this.grow(this.size + 1);
    }

    private int newCapacity(int minCapacity) {
        int oldCapacity = this.elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity <= 0) {
            if (this.elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
                return Math.max(10, minCapacity);
            } else if (minCapacity < 0) {
                throw new OutOfMemoryError();
            } else {
                return minCapacity;
            }
        } else {
            return newCapacity - 2147483639 <= 0 ? newCapacity : hugeCapacity(minCapacity);
        }
    }
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Sorry, hab mich völlig verguckt :)

Das grow(size + 1) vergrößert das Array auf mindestens size + 1, normalerweise aber um die genannten 50%.

In dem Fall mit drei Elementen ist das eben genau 1, wenn man noch mehr hinzufügen würde, würde man auch größere Vergrößerungen sehen.

 
kneitzel

kneitzel

Top Contributor
Der Wert size + 1 legt ja nur die minCapacity fest, nicht die tatsächliche neue Kapazität.
Oh, irgendwie hatte ich das komplett übersehen beim überfliegen der Klasse. Meine Aussage:
Der Code mit den +50% ist auch gar nicht mehr enthalten was ich so gesehen habe.
ist damit natürlich kompletter Quatsch. Der Code ist natürlich so enthalten wie Du ihn auch korrekt kopiert hast und ich war schlicht blind. (Will jemand frische Tomaten? Ganz frisch von meinen Augen gepflückt - bezüglich Sprichwort: Tomaten auf den Augen haben :) )
 
B

berndoa

Bekanntes Mitglied
Da evtl. noch der Hinweis: Das Verhalten hängt natürlich auch von der Version ab. OpenJDK 11 hat das beschriebene Verhalten:

Aber wenn jemand noch Java 8 / OpenJDK 8 verwendet, dann ist das Verhalten anders (wie man es teilweise in älteren Beiträgen findet):
Java:
    private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
==> Es wird immer mindestens um 50% erweitert ) oldCapacity >> 1 ist oldCapacity / 2
Wann wurde das denn geändert?
Wie war die ganze Zeit felsenfest der Überzeugung, das mit den +50% Kapazität wäre das aktuelle.
und nicht das lächerliche Erweitern um eine(!) Stelle! :O
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java Array Länge aus anderer Klasse lesen Java Basics - Anfänger-Themen 1
G Java 2-dimensionalen int-Array Summe Java Basics - Anfänger-Themen 2
S Java Array Probleme Java Basics - Anfänger-Themen 3
S Java Array Problem... Java Basics - Anfänger-Themen 2
I Java zweidimensionales array befüllen mit for-schleife Java Basics - Anfänger-Themen 2
M Quiz in Java programmieren mit Array Java Basics - Anfänger-Themen 8
L Java Int-Array, Zahlen sortieren Java Basics - Anfänger-Themen 8
T Java: Array monat absteigend sortieren? Java Basics - Anfänger-Themen 1
X Java zweidimensionales Array Java Basics - Anfänger-Themen 5
X Array List geordnet ausgeben. (JSF und JAVA) Java Basics - Anfänger-Themen 1
S Array Java erweitern Java Basics - Anfänger-Themen 27
M Wie kann ich im JAVA-GUI im Textfeld ein Array speichern Java Basics - Anfänger-Themen 4
B Java Array Fakultät Function Java Basics - Anfänger-Themen 5
E Wie wird in Java ein Char-Array terminiert ? Java Basics - Anfänger-Themen 15
kilopack15 Java Array Skalarprodukt testen Java Basics - Anfänger-Themen 21
T Variablen PHP Array jetzt für Java Java Basics - Anfänger-Themen 1
W Erste Schritte füllen Attribute java Klasse in for Schleife und Array Java Basics - Anfänger-Themen 16
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
J Java Array Zeichnung Skalieren und verschieben Java Basics - Anfänger-Themen 5
P Java : Array Fehler Java Basics - Anfänger-Themen 4
B Java rekursion minimum von ein array Java Basics - Anfänger-Themen 2
U JAVA - Ungerade Zahlen Array Java Basics - Anfänger-Themen 9
B Input/Output Formatierter Text aus PDF als Array auswerten in JAVA möglich ? Java Basics - Anfänger-Themen 8
T Erste Schritte Java ein Array Feld[index] zurueckgeben? Java Basics - Anfänger-Themen 20
U Kann man in Java ein Array zum Teil vorbelegen? Java Basics - Anfänger-Themen 4
J Java-Array abwechselnd Gross- und Kleinbuchstaben Java Basics - Anfänger-Themen 5
M Java spuckt Exeption bei Array aus Java Basics - Anfänger-Themen 2
T Collections Java Anfänger - Array-Struktur vollkommen unklar Java Basics - Anfänger-Themen 2
S Java Array Basic Java Basics - Anfänger-Themen 5
M java.util.ArrayList to java.sql.Array Java Basics - Anfänger-Themen 4
K Java Array Problem Java Basics - Anfänger-Themen 3
M Java Array - Durchschnitt Java Basics - Anfänger-Themen 7
S java array Java Basics - Anfänger-Themen 7
S JAVA Array Anwendersystem Java Basics - Anfänger-Themen 8
K java.lang.NullPointerException in Array bei Arraylistübergabe Java Basics - Anfänger-Themen 7
A Anfängerfrage - array required, but java.lang.String found Java Basics - Anfänger-Themen 7
J Ringpuffer als Array in Java ;-) Java Basics - Anfänger-Themen 3
B Java Array List größe auslesen zur Suchfunktion Java Basics - Anfänger-Themen 5
C Bäume in Java. Knoten in Array speichern Java Basics - Anfänger-Themen 3
C Java Array wie in PHP? Java Basics - Anfänger-Themen 9
S Java - Double-Array-Wertzuweisung erfolgt nicht Java Basics - Anfänger-Themen 4
danieldemetry Java - Graph Komponenten - Ausgabe Java Basics - Anfänger-Themen 0
Hamudi Bachir Java Spiel des Lebens Java Basics - Anfänger-Themen 9
Icke0801 Java - Sqlite3 Java Basics - Anfänger-Themen 5
josfe1234 JAVA FX problem Java Basics - Anfänger-Themen 3
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
M CS GO Server mit Java steuern Java Basics - Anfänger-Themen 3
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
Spitzli Java login mit hashed password Java Basics - Anfänger-Themen 11
josfe1234 Hilfe access denied ("java.io.FilePermission" " " "read") Java Basics - Anfänger-Themen 11
nevel Nachhilfe in Java Java Basics - Anfänger-Themen 4
O Java über cmd benutzen ? Java Basics - Anfänger-Themen 5
S Java TelephoneBookEntry search Java Basics - Anfänger-Themen 2
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
Der Grütz Verständnisfrage zu Übung aus Java Kurs - Schaltjahr bestimmen Java Basics - Anfänger-Themen 2
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Brüche in java Java Basics - Anfänger-Themen 7
L Java operator % Java Basics - Anfänger-Themen 3
rafi072001 Integer Anomalie Java Java Basics - Anfänger-Themen 7
H Java file nicht gefunden Java Basics - Anfänger-Themen 5
M Packages erstellen mit Java-Editor Java Basics - Anfänger-Themen 6
mr.kottig Großeltern herausfinden Java - Map? Java Basics - Anfänger-Themen 16
L Java erstellt leere Datei Java Basics - Anfänger-Themen 8
D Java Übungsaufgaben Java Basics - Anfänger-Themen 6
A Standardabweichung in Java berechnen Java Basics - Anfänger-Themen 10
H Java fx Java Basics - Anfänger-Themen 3
J JAVA-Problem blockiert MEDIATHEKVIEW Java Basics - Anfänger-Themen 13
M Java Anfang Java Basics - Anfänger-Themen 13
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
I Java auf der Konsole Java Basics - Anfänger-Themen 5
T Die neuste Java jee Java Basics - Anfänger-Themen 12
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
G Java Hilfe Java Basics - Anfänger-Themen 3
johnboyne Java Zeichen Trennen Java Basics - Anfänger-Themen 1
I Java Quicksort PAP Java Basics - Anfänger-Themen 2
K Buchstabenzähler Java (Anfänger) Java Basics - Anfänger-Themen 35
J Java List, Bitte um Hilfe Java Basics - Anfänger-Themen 15
J Java List, bitte um Hilfe Java Basics - Anfänger-Themen 3
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Schleifen in Java Java Basics - Anfänger-Themen 4
Alan6 Java Editor BMI Rechner Java Basics - Anfänger-Themen 7
C java.sql Statement kann nicht geschlossen werden Java Basics - Anfänger-Themen 9
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1
P myClass?.method() in Java Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
Marc111111111 Selection Sort in Java?? Java Basics - Anfänger-Themen 6
NicoDeluxe Java RAM Management Java Basics - Anfänger-Themen 26
N Groß- und Kleinschreibung bei Java: void Methode Java Basics - Anfänger-Themen 1
T SelectionSort Java Java Basics - Anfänger-Themen 1
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
T Java Fx Java Basics - Anfänger-Themen 4
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
G Java Rabatt berechnen Java Basics - Anfänger-Themen 8
MPFeuer JAVA Expert-PDF Java Basics - Anfänger-Themen 1
M Java-Applet zur Mittelwertberechnung Java Basics - Anfänger-Themen 3
Abraham42 Berechnung der Kühlung Java Java Basics - Anfänger-Themen 12
J Java Queue mit default Werten erstellen Java Basics - Anfänger-Themen 4
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14

Ähnliche Java Themen


Oben