[JAVA] Das Verhalten unterscheidet sich zwischen new und clear () von ArrayList

Ich bin süchtig danach.

Einführung

Beim Umgang mit Listen in Java denke ich, dass ich ArrayList oft als neu verwende.

hoge.java


List<String> list = new ArrayList<>();

Als ich den Google-Lehrer fragte, wann ich die ArrayList wiederverwenden wollte,

  1. neu
  2. Verwenden Sie die ArrayList.clear () -Methode

Ich denke, dass zwei Wege empfohlen werden. Und ich erwähne den Unterschied zwischen den beiden nicht und ich denke, dass Qiitas Artikel ein Hit sein wird und sagt: "Die Ausführungsgeschwindigkeit ist unterschiedlich".

In der Realität gibt es jedoch nicht nur Unterschiede in der Geschwindigkeit, sondern auch im Verhalten.

Unterschied zwischen neu und klar ()

Angenommen, Sie möchten eine zweidimensionale Liste erstellen, indem Sie zwei Elemente aus der eindimensionalen Liste extrahieren.

Der Beispielcode ist unten dargestellt. Zuallererst ist es aus dem Fall von neu.

sample.java


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class TestArraylist {
    public static void main(String args[]) {
        //Zweidimensionale Liste für die Ausgabe
        List<ArrayList<String>> sampleLists = new ArrayList<>();
        //Temporäre Liste zum Hinzufügen von Elementen zu sampleLists
        ArrayList<String> listA = new ArrayList<>();
        //Geeignete Probe
        List<String> listB = Arrays.asList("AA", "BB", "CC", "DD", "EE", "FF");

        //Erstellen Sie eine Liste mit 2 Elementen und fügen Sie sie zu sampleLists hinzu
        for (int i = 0; i < listB.size(); i++) {
            if (i % 2 == 0) {
                listA.add(listB.get(i));
                continue;
            }
            sampleLists.add(listA);
            listA.add(listB.get(i));
            //Bestätigung vor neu
            System.out.println(sampleLists);

            //Neue temporäre Liste
            listA = new ArrayList<>();
            //Bestätigung nach neu
            System.out.println(sampleLists);
        }
    }
}

Wenn Sie dies tun ...

[[AA, BB]]
[[AA, BB]]
[[AA, BB], [CC, DD]]
[[AA, BB], [CC, DD]]
[[AA, BB], [CC, DD], [EE, FF]]
[[AA, BB], [CC, DD], [EE, FF]]

Sie können sehen, dass die Liste genau das ist, was Sie wollen.

Angenommen, Sie verwenden die Methode clear anstelle von new. Die Ausgabe, wenn listA = new ArrayList <> (); im obigen Beispiel in den Code listA.clear (); mit der Methode clear umgeschrieben wird, ist ...

[[AA, BB]]
[[]]
[[CC, DD], [CC, DD]]
[[], []]
[[EE, FF], [EE, FF], [EE, FF]]
[[], [], []]

Auf diese Weise ** ist das Element, das hinzugefügt werden sollte, bei jedem Aufruf der Löschmethode eine Liste von Element 0, und das neu hinzugefügte Element wird bis zum nächsten Aufruf der Löschmethode zu allen Listen hinzugefügt. Masu **.

abschließend

Wenn ich versuche zu googeln, gibt es viele Seiten, auf denen angegeben ist, auf welcher Seite die Elemente des Arrays gelöscht werden können. Ich bin also nicht vorsichtig, aber in Wirklichkeit verhält es sich anders als oben beschrieben. Seien Sie also vorsichtig.

Recommended Posts

Das Verhalten unterscheidet sich zwischen new und clear () von ArrayList
Der Inhalt des Rückgabewerts von executeBatch unterscheidet sich zwischen 11g und 12c
Unterschied zwischen ArrayList und LinkedList
Unterschied zwischen List und ArrayList
Java-Anfänger fassten das Verhalten von Array und ArrayList kurz zusammen
[Java] Unterschied zwischen Array und ArrayList
Informationen zu removeAll und RetainAll von ArrayList
[Rails] Unterschied im Verhalten zwischen Delegat und has_many-through bei Eins-zu-Eins-zu-Viele
Unterschied zwischen Vorwort und Postfix von Operatoren
Unterschied zwischen isEmpty und isBlank von StringUtils
Unterschied zwischen EMPTY_ELEMENTDATA und DEFAULTCAPACITY_EMPTY_ELEMENTDATA in ArrayList
Was ist der Unterschied zwischen SimpleDateFormat und DateTimeFormatter? ??
java.util.Arrays.asList () ist kein Ersatz für neue ArrayList <> ()
Unterschied zwischen Mitglied und Sammlung von Schienen route.rb
[Schienen] Unterschied zwischen Erstellungsmethode und neuer + Speichermethode
Gibt es Ende 2017 einen Leistungsunterschied zwischen Oracle JDK und OpenJDK?