Frage Wie kann ich Elemente dynamisch zu einem Java-Array hinzufügen?


In PHP können Sie Elemente wie folgt dynamisch zu Arrays hinzufügen:

$x = new Array();
$x[] = 1;
$x[] = 2;

Danach, $x wäre ein Array wie folgt: {1,2}.

Gibt es eine Möglichkeit, etwas ähnliches in Java zu tun?


75
2018-02-21 02:28


Ursprung


Antworten:


Sehen Sie sich java.util.LinkedList oder java.util.ArrayList an

List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);

100
2018-02-21 02:32



Arrays in Java haben eine feste Größe, so dass Sie nicht "etwas am Ende hinzufügen können", wie Sie es in PHP tun könnten.

Ein bisschen ähnlich dem PHP-Verhalten ist dies:

int[] addElement(int[] org, int added) {
    int[] result = Arrays.copyOf(org, org.length +1);
    result[org.length] = added;
    return result;
}

Dann kannst du schreiben:

x = new int[0];
x = addElement(x, 1);
x = addElement(x, 2);

System.out.println(Arrays.toString(x));

Aber dieses Schema ist schrecklich ineffizient für größere Arrays, da es jedes Mal eine Kopie des gesamten Arrays erstellt. (Und es ist tatsächlich nicht vollständig äquivalent zu PHP, da Ihre alten Arrays gleich bleiben).

Die PHP-Arrays sind in der Tat die gleichen wie eine Java-HashMap mit einem hinzugefügten "Max-Schlüssel", damit sie wissen, welcher Schlüssel als nächstes zu verwenden ist und eine seltsame Iterationsreihenfolge (und eine seltsame Äquivalenzrelation zwischen Integer-Schlüsseln und einigen Strings). Verwenden Sie für einfache indizierte Sammlungen besser eine Liste in Java, wie die anderen Beantworter vorgeschlagen haben.

Wenn Sie die Verwendung vermeiden möchten List Aufgrund des Overheads, das jedes int in Integer umschließt, sollten Reimplementierungen von Auflistungen für primitive Typen verwendet werden, die Arrays intern verwenden, aber nicht bei jeder Änderung kopieren, nur wenn das interne Array voll ist (genau wie ArrayList). (Ein schnell gegoogeltes Beispiel ist diese IntList-Klasse.)

Guave enthält Methoden, die solche Wrapper erstellen im Ints.asList, Longs.asList, etc.


63
2018-02-21 15:13



Apache Commons hat ein ArrayUtils Implementierung zum Hinzufügen eines Elements am Ende des neuen Arrays:

/** Copies the given array and adds the given element at the end of the new array. */
public static <T> T[] add(T[] array, T element)

17
2017-08-25 12:59



Sie können ein verwenden ArrayList und dann benutze die toArray() Methode. Aber abhängig von dem, was Sie tun, brauchen Sie vielleicht gar kein Array. Schauen Sie nach, ob Lists sind mehr was du willst.

Sehen: Java List Tutorial


11
2018-02-21 02:34



Ich habe diese Frage sehr oft im Internet gesehen und meiner Meinung nach haben viele Leute mit hohem Ansehen diese Fragen nicht richtig beantwortet. Daher möchte ich hier meine eigene Antwort ausdrücken.

Zuerst sollten wir überlegen, ob es ein Unterschied zwischen array und arraylist.

Die Frage fragt nach dem Hinzufügen eines Elements zu einem Array, und nicht ArrayList


Die Antwort ist ziemlich einfach. Es kann in 3 Schritten durchgeführt werden.

  1. Konvertieren Array in eine Arraylist
  2. Fügen Sie der ArrayListe ein Element hinzu
  3. Konvertieren Sie die neue ArrayList in das Array zurück

Hier ist das einfache Bild davon enter image description here

Und schließlich ist hier der Code:

Schritt 1:

public List<String> convertArrayToList(String[] array){
        List<String> stringList = new ArrayList<String>(Arrays.asList(array));
        return stringList;
    }

Schritt 2:

public  List<String> addToList(String element,List<String> list){

            list.add(element);
            return list;
    }

Schritt 3:

public String[] convertListToArray(List<String> list){
           String[] ins = (String[])list.toArray(new String[list.size()]);
           return ins;
    } 

Schritt 4

public String[] addNewItemToArray(String element,String [] array){
        List<String> list = convertArrayToList(array);
        list= addToList(element,list);
        return  convertListToArray(list);
}

9
2018-01-30 14:16



Wahrscheinlich möchten Sie dafür eine ArrayList verwenden - für eine dynamisch große Array-ähnliche Struktur.


5
2018-02-21 02:32



Sie können Elemente dynamisch zu einem Array hinzufügen, indem Sie Collection-Frameworks in JAVA verwenden. collection Framework funktioniert nicht für primitive Datentypen.

Dieses Collection-Framework wird im Paket "java.util. *" Verfügbar sein

Wenn Sie beispielsweise ArrayList verwenden,

Erstellen Sie ein Objekt und fügen Sie dann eine Anzahl von Elementen hinzu (beliebiger Typ wie String, Integer ... usw.)

ArrayList a = new ArrayList();
a.add("suman");
a.add(new Integer(3));
a.add("gurram");

Jetzt wurden 3 Elemente zu einem Array hinzugefügt.

wenn Sie irgendwelche der hinzugefügten Elemente entfernen möchten

a.remove("suman");

erneut, wenn Sie ein Element hinzufügen möchten

a.add("Gurram");

Die Array-Größe nimmt also dynamisch zu / ab.


4
2017-08-25 13:18



Verwenden Sie eine ArrayList oder jonglieren Sie mit Arrays, um die Array-Größe automatisch zu erhöhen.


1
2018-02-21 03:07