Java Array-Länge ändern?

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

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:

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

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 ;)
 

berndoa

Top Contributor
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
 

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);
 

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.
 
K

kneitzel

Gast
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
 
K

kneitzel

Gast
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.
 
K

kneitzel

Gast
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

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

Super-Moderator
Mitarbeiter
K

kneitzel

Gast
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 :) )
 

berndoa

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
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
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
M Java Array Java Basics - Anfänger-Themen 8
G Java 2-dimensionalen int-Array Summe Java Basics - Anfänger-Themen 2
Splayfer Java Array Probleme Java Basics - Anfänger-Themen 3
Splayfer 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
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben