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

Fledermaus aus der Hölle
quelle

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.

Scaevity
quelle
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));
Adrian Shum
quelle
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);
Radiodef
quelle
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"); (...);
            }
        };
Fran G Aparicio
quelle
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);
}
rhino9
quelle
-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));
user2821654
quelle
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