In Bezug auf die unveränderliche Liste (erstellt von Arrays.asList ())

8

Wenn wir eine Liste aus einem Array mit java.util.Arrays.asList() erstellen, ist die Liste unveränderlich. Ich bin nur neugierig zu wissen, warum wir eine unveränderliche Liste erstellen möchten, wenn der grundlegende Zweck von List (oder Set oder Map ) dynamische Größe haben und Elemente nach Belieben hinzufügen, entfernen können. Wenn wir eine Datenstruktur mit fester Größe benötigen, gehen wir nach Array, und wenn wir eine dynamische Datenstruktur brauchen, gehen wir nach List oder Set oder Map usw. Also, was ist der Zweck einer unveränderlichen Liste? Ich bin bei der Arbeit an meinem Auftrag auf dieses Problem gestoßen.

    
Venkat 22.08.2014, 12:52
quelle

2 Antworten

16
  

Wenn wir mit java.util.Arrays.asList () eine Liste aus einem Array erstellen, ist die Liste änderbar.

Ja und nein: Die Liste kann geändert werden, indem

aufgerufen wird %Vor%

Aber die Liste darf nicht strukturell geändert werden. Das bedeutet, dass es nicht möglich ist, Elemente zur Liste hinzuzufügen oder Elemente aus der Liste zu entfernen. Der Grund ist einfach, dass die Liste immer noch vom Array unterstützt wird und die Größe des Arrays sich nicht ändern kann.

  

Wenn wir eine veränderbare Sammlung fester Größe benötigen, gehen wir zu Array

Und das ist der entscheidende Punkt hier: Ein Array ist nicht a Sammlung . Die Methode Arrays.asList dient hauptsächlich als "Brücke" zwischen der "arrays world" und der "Collections World".

Mit der Methode Arrays.asList können Sie beispielsweise Daten an eine Methode übergeben, die ein Collection erwartet:

%Vor%

Dieser Anwendungsfall umfasst das Erstellen anderer Sammlungen aus einem Array. Wenn Sie beispielsweise ein Array haben und ein Set mit den Elementen aus dem Array erstellen möchten, könnten Sie

verwenden %Vor%

Aber mit der Methode Arrays.asList kann dies bequemer durchgeführt werden:

%Vor%

Die Methode Arrays.asList ist sozusagen das Gegenstück zu Collection # toArray -Methode, die in die entgegengesetzte Richtung funktioniert (obwohl diese Methode normalerweise das Erstellen und Füllen eines neuen Arrays beinhaltet, während die Arrays.asList -Methode nur" Wraps "enthält ein Array und lässt es wie " List " aussehen.

    
Marco13 22.08.2014, 13:07
quelle
0

Dies liegt an add() in der Klasse AbstractList , erweitert um die angepasste ArrayList (innere statische Klasse) unter der Array-Java-Klasse (die intern verwendet wird). Bitte beachten Sie, dass diese add () - Methode nicht in java.util.ArrayList definiert ist, sondern die von java.util.Arrays$ArrayList .

Ein Array hat die Eigenschaft, eine feste Größe zu haben, die nativ von jvm bereitgestellt wird. Auch wenn, Arrays.copyOf () mit größerer Größe wie Arrays.copyOf(arr, 10); //10 is the length verwendet wird, wobei das ursprüngliche Array arr= int[]{1,2} // size is two ist. Es erstellt immer ein neues Array mit System.arraycopy() , das schließlich eine native Methode aufruft.

[statische void arraycopy (Objekt src, int srcPos, Objekt dest, int destPos, int Länge)]

Bitte beachten Sie, dass die obige Liste nur Größenbeschränkungen enthält. Wenn Sie eine änderbare Liste wirklich ändern möchten, verwenden Sie bitte Collections.unmodifiableList(mutableList); . Immutablility ist kein definiertes Konzept, sondern ein Entwicklergedanke. Bitte beachten Sie Ссылка und Ссылка

    
hi.nitish 12.02.2017 15:17
quelle