Fügen Sie der bereits initialisierten Arrayliste in Java mehrere Elemente hinzu


73

Ich google es und kann die Syntax nicht finden. Meines wird arraylistmöglicherweise basierend auf einer Benutzereinstellung unterschiedlich ausgefüllt, daher habe ich es initialisiert

ArrayList<Integer> arList = new ArrayList<Integer>();

Und jetzt möchte ich Hunderte von ganzen Zahlen hinzufügen, ohne dies einzeln zu tun arList.add(55);

Antworten:


101

Wenn Sie eine andere Liste haben, die alle Elemente enthält, die Sie hinzufügen möchten, können Sie dies tun arList.addAll(otherList). Wenn Sie der Liste immer dieselben Elemente hinzufügen, können Sie alternativ eine neue Liste erstellen, die so initialisiert wird, dass sie alle Ihre Werte enthält, und die addAll()Methode mit so etwas wie verwenden

Integer[] otherList = new Integer[] {1, 2, 3, 4, 5};
arList.addAll(Arrays.asList(otherList));

oder, wenn Sie dieses unnötige Array nicht erstellen möchten:

arList.addAll(Arrays.asList(1, 2, 3, 4, 5));

Andernfalls müssen Sie eine Art Schleife haben, die die Werte einzeln zur Liste hinzufügt.


Wirklich, ich dachte, es gibt einen besseren Weg? Na ja, Looping funktioniert. Thx
batoutofhell

Ja, es sei denn, Sie möchten eine neue Liste erstellen, die mit all Ihren Werten initialisiert ist (siehe meine Bearbeitung oben). Dies sind Ihre Optionen.
Scaevity

Die zweite ist definitiv die prägnanteste Methode
ucMedia

29

Was ist die "Quelle" dieser ganzen Zahl? Wenn es etwas ist, das Sie in Ihrem Quellcode fest codieren müssen, können Sie dies tun

arList.addAll(Arrays.asList(1,1,2,3,5,8,13,21));

Dies ist definitiv die prägnanteste Art, dies zu tun.
Krispy

10

Collections.addAll ist eine varargs-Methode, mit der wir einer Sammlung in einer einzigen Anweisung eine beliebige Anzahl von Elementen hinzufügen können:

List<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 2, 3, 4, 5);

Es kann auch verwendet werden, um einer Sammlung Array-Elemente hinzuzufügen:

Integer[] arr = ...;
Collections.addAll(list, arr);

3

Wenn Sie mehrere Codezeilen vermeiden möchten, um Platz zu sparen, kann diese Syntax hilfreich sein:

        java.util.ArrayList lisFieldNames = new ArrayList() {
            {
                add("value1"); 
                add("value2");
            }
        };

Wenn Sie neue Zeilen entfernen, können Sie sie komprimiert wie folgt anzeigen:

        java.util.ArrayList lisFieldNames = new ArrayList() {
            {
                add("value1"); add("value2"); (...);
            }
        };

Erfordert immer noch mehrere Anrufe add()und fügt Unordnung hinzu, selbst wenn es auf eine Zeile komprimiert ist

Ich hätte die Werte in einem String Ej. String theValues ​​= "1,20,2,1001"; (von Hand oder aus einer Datei geladen). Übergeben Sie es dann an Array: Integer [] theArray = theValues.split (",", -1); Sobald Sie das Array haben, können Sie es einfach an ArrayList übergeben: ArrayList <Integer> numbersList = new ArrayList <Integer> (java.util.Arrays.asList (theArray)); . (Nicht getestet)
Fran G Aparicio

Hier ist eine detailliertere Antwort, warum dies funktioniert.
Alex

0

Wenn Sie viele Ganzzahlen hinzufügen müssten, wäre es wahrscheinlich am einfachsten, eine for-Schleife zu verwenden. Beispiel: Hinzufügen von 28 Tagen zu einem DaysInFebruary-Array.

ArrayList<Integer> daysInFebruary = new ArrayList<>();

for(int i = 1; i <= 28; i++) {
    daysInFebruary.add(i);
}

-4

Ich glaube, die obige Antwort ist falsch. Der richtige Weg, um mit mehreren Werten zu initialisieren, wäre dieser ...

int[] otherList ={1,2,3,4,5};

Die vollständige Antwort mit der richtigen Initialisierung würde also so aussehen

int[] otherList ={1,2,3,4,5};
arList.addAll(Arrays.asList(otherList));

6
Dies wird nicht kompiliert, da int ein primitiver Typ ist und Arrays.asList () bei Arrays primitiver Typen nicht korrekt funktioniert. Die gewählte Antwort verwendet Integer, und das ist der richtige Weg, dies zu tun.
Krispy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.