Ich werde Ihnen zeigen, wie Sie ein Array in eine ArrayList konvertieren. Es gibt Fallstricke, in die Sie sich definitiv verlieben werden, lesen Sie also bis zum Ende weiter!
ListToArray.java
String[] array ={"A","B","C"};
List<String> list = Arrays.asList(array);
System.out.println("Array= " + Arrays.toString(array));
System.out.println("List = " + list.toString());
Array= [A, B, C]
List = [A, B, C]
erledigt! Es ist einfach.
... aber
ListToArray.java
//Unterlassung
List<String> list = Arrays.asList(array);
list.add("D"); //Addiere D.!
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at codeSample.ListToArray.main(ListToArray.java:13)
Erhalten Sie einen Fehler
Versuchen Sie, die Klasse zur Rückkehr zu bewegen
ListToArray.java
//Unterlassung
List<String> list = Arrays.asList(array);
ArrayList<String> arrayList = new ArrayList<String>();
System.out.println("Regelmäßige ArrayList= " + arrayList.getClass());
System.out.println("Konvertierung vom Array= " + list.getClass());
Regelmäßige ArrayList= class java.util.ArrayList
Konvertierung vom Array= class java.util.Arrays$ArrayList
Hmm, etwas anderes!
java:java.util.Arrays.class
//Unterlassung
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a; //←←← ist endgültig!
ArrayList(E[] array) {
a = Objects.requireNonNull(array); //Referenzkopie (zusätzlicher Hinweis)
}
@Override
public int size() {
return a.length;
}
//Unterlassung
}
Es wurde eine vereinfachte Version von ArrayList zurückgegeben, die in der inneren Klasse der Arrays-Klasse definiert ist!
java:java.util.AbstractList.class
public boolean add(E e) {
add(size(), e);
return true;
}
//Unterlassung
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
ListToArray.java
//Unterlassung
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(array));
arrayList.add("D");
System.out.println("Array= " + Arrays.toString(array));
System.out.println("List = " + arrayList.toString());
Konvertieren Sie den Bereich von ArrayList neu. (Zusatz)
Array= [A, B, C]
List = [A, B, C, D]
Arrays.asList () führt nur eine Typkonvertierung durch, und der referenzierte Speicherbereich bleibt gleich. (Zusatz)
Recommended Posts