Als ich lange Zeit Java verwendet habe, habe ich mich ein wenig mit Arrays.asList () beschäftigt, daher werde ich die Notizen von Arrays.asList () als Memorandum aufschreiben.
String[] words = {"abc","def","ghi"};
List<String> list = Arrays.asList(words);
Gibt eine Liste mit fester Größe zurück, die mit dem angegebenen Array funktioniert.
Schreiben Sie in [Java API](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Arrays.html#asList-T ...-) wie oben. Es wurde getan. Dies bedeutet, dass die Länge der Liste festgelegt ist, auch wenn der Rückgabewert der asList-Methode eine Liste ist.
Wenn Sie beispielsweise versuchen, die Anzahl der Elemente mit der Methode add oder remove für den Rückgabewert der Methode asList zu ändern, tritt kein Kompilierungsfehler auf, sondern zur Laufzeit java.lang.UnsupportedOperationException. com / javase / jp / 8 / docs / api / java / lang / UnsupportedOperationException.html) wird auftreten.
Dieser Punkt wird auch in die API geschrieben. Wenn Sie die API also ordnungsgemäß überprüfen, können Sie sie problemlos löschen.
//Hinzufügen von Elementen zu einer Liste mit fester Länge
static void add() {
List<Integer> fixedSizeList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//UnsupportedOperationException tritt zur Laufzeit auf.
fixedSizeList.add(11);
}
//Elemente für Listen mit fester Länge löschen
static void remove() {
List<Integer> fixedSizeList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
//UnsupportedOperationException tritt zur Laufzeit auf.
fixedSizeList.remove(5);
}
Das Problem "Die Länge der Liste ist behoben" kann vermieden werden, indem "Die von der asList-Methode im Konstruktor von ArrayList generierte Liste angeben" wie unten gezeigt festgelegt wird.
Sie können mit List # toArray () auf einmal von einer Liste in ein Array konvertieren, aber es scheint, dass die Konvertierung von einem Array in eine Liste mit variabler Länge zwangsläufig in zwei Schritten erfolgt.
// Arrays.asList()Konvertieren Sie die in Schritt 1 erstellte Liste in eine Liste mit variabler Länge (veränderbar).
static void add2() {
List<Integer> fixedSizeList = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
List<Integer> list = new ArrayList<>(fixedSizeList);
//Zur Laufzeit tritt kein Fehler auf.
list.add(11);
}
Wenn Sie im Argument von Arrays.asList () ein Array vom primitiven Typ angeben, lautet der Rückgabewert nicht "List
Dies wurde überhaupt nicht in die API geschrieben, daher befürchtete ich, dass es zunächst nicht kompiliert werden könnte, aber als Ergebnis war ich erleichtert, dass es wie angegeben funktionierte.
Es scheint, dass es eine Methode wie "Geben Sie ein Array des Wrapper-Klassentyps als Argument an" gibt, um dieses Problem zu vermeiden, aber es scheint seltsam, sich die Mühe zu machen, es in einen Wrapper-Klassentyp zu konvertieren.
static void create1() {
//Wenn es sich um ein Referenztyp-Array handelt, wird die Referenztypliste wie erwartet zurückgegeben....
String[] words = {"abc","def","ghi"};
List<String> list1 = Arrays.asList(words);
}
static void create2() {
//AsList ein Array primitiver Typen()Wenn es als Argument von verwendet wird, wird eine Liste mit 1 Element zurückgegeben, da "das Array zu einem Element in der Liste wird".
// list2.size()Ist 1.
int[] numbers = {1,2,3,4,5,6,7,8,9,10};
List<int[]> list2 = Arrays.asList(numbers);
System.out.println("Länge der Liste2:" + list2.size());
}
static void create3() {
//Argument variabler Länge asList()Wenn Sie es an übergeben, wird die Liste wie erwartet generiert, auch wenn das Argument ein ganzzahliger Wert (= int) ist.
// list3.size()Ist 10.
List<Integer> list3 = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
System.out.println("list3 Länge:" + list3.size());
}
Recommended Posts