[JAVA] Falle der Klasse asList of Arrays

Einführung

Ich habe in letzter Zeit viel Arrays benutzt und war süchtig danach. Ich werde es als Memo schreiben.

Ein Array erstellen

Bei Verwendung eines Arrays in Java gibt es die folgenden zwei Methoden. Generieren mit new und Generieren mit der Klasse asList of Arrays.

Beide können ein String-Array mit "test1" und "test2" erstellen.

Versuchen Sie, das Array zu manipulieren

Nachdem wir das Array erstellt haben, können wir es hinzufügen / bearbeiten / löschen. Der Testcode sieht so aus

sample.Java: Fall mit Arrays


@Test
public void test_sample() {

    List<String> test = Arrays.<String>asList("aaa", "bbb");

    // 1.Element hinzufügen
    test.add("ccc");

    // 2.Element löschen
    test.remove(1);

    // 3.Element bearbeiten
    test.set(1, "ddd");

    // 4.Löschen Sie alle Elemente
    test.clear();
}

Wenn ich das versuche, außer in Fall 3 java.lang.UnsupportedOperationException wird auftreten.

Aber was ist mit dem Fall mit neu?

sample2.Java: Fall mit neu


@Test
public void test_sample2() {

    List<String> test = new ArrayList<>();
    test.add("aaa");
    test.add("bbb");

    // 1.Element hinzufügen
    test.add("ccc");

    // 2.Element löschen
    test.remove(1);

    // 3.Element bearbeiten
    test.set(1, "ddd");

    // 4.Löschen Sie alle Elemente
    test.clear();
}

In diesem Fall tritt auch dann kein Fehler auf, wenn er ausgeführt wird, und das Ergebnis ist wie folgt.

Inhalt des Arrays nach Fall 1: aaa, bbb, ccc Inhalt der Sequenz nach Fall 2: aaa, ccc Inhalt des Arrays nach Fall 3: aaa, ddd Inhalt des Arrays nach dem Fall von 4: Leer

Warum?

Warum gibt es einen Unterschied, wenn beide nur dieselbe Array-Operation ausführen? Wenn Sie new verwenden, wird dynamisch ein Array generiert, jedoch für asList in der Arrays-Klasse

Dies liegt daran, dass eine Liste fester Größen ** zurückgegeben wird.

Es wurde auch in den Java-API-Spezifikationen erwähnt. Auszug aus Class Arrays

Qualifikanten und Typen Methodenbeschreibung
static <T> List<T> asList(T... a)
Link zum angegebenen Array
Gibt eine Liste fester Größen zurück

Was ist eine Liste mit fester Größe?

Bei Verwendung von new das Objekt des angegebenen Elements Generieren. Daher existiert die Entität.

Im Fall von Arrays.asList jedoch angegeben Wie eine Liste mit dem Inhalt eines Elements ** Nur so tun als ob **, also feste Größe (feste Nummer) Es wird eine Liste von Wenn Sie eine Zahlenoperation ausführen, wird der Fehler UnsupportedOperationException wie oben beschrieben angezeigt.

Zusammenfassung

Die von Arrays.asList generierte Liste steuert die Anzahl der Elemente Ich konnte es nicht tun, also habe ich eine dynamische Liste verwendet Nicht für die Verarbeitung geeignet (obwohl ich nicht denke, dass es normalerweise verwendet wird)

Wenn ich es jedoch als Listentyp mit einer festen Anzahl von Elementen behandeln möchte (die nicht geändert werden können), denke ich persönlich, dass es besser ist, weil es keinen unachtsamen Speicher zuweist, als ihn dem von new erstellten Objekt hinzuzufügen.

Recommended Posts

Falle der Klasse asList of Arrays
Verwendung der Datumsklasse
[GCD] Grundlagen der DispatchQueue-Klasse
Beispiel für die Verwendung einer abstrakten Klasse
[Java] Komparator der Collection-Klasse
Zusammenfassung der Java Math Klasse
Verschiedene Methoden der Java String Klasse
Verschiedene Methoden der String-Klasse