Ich habe in letzter Zeit viel Arrays benutzt und war süchtig danach. Ich werde es als Memo schreiben.
Bei Verwendung eines Arrays in Java gibt es die folgenden zwei Methoden. Generieren mit new und Generieren mit der Klasse asList of Arrays.
new ArrayList<T>()
//Generieren Sie ein Array
List<String> hoge = new AraryList<String>();
//Element hinzufügen
hoge.add("test1");
hoge.add("test2");
Arrays.<T>asList()
//Generieren Sie ein Array
List<String> hoge = Arrays.<String>asList("test1", "test2");
Beide können ein String-Array mit "test1" und "test2" erstellen.
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 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 |
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.
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