Je vais vous montrer comment convertir un tableau en ArrayList. Il y a des pièges dont vous tomberez certainement amoureux, alors poursuivez votre lecture jusqu'à la fin!
ListToArray.java
String[] array ={"A","B","C"};
List<String> list = Arrays.asList(array);
System.out.println("Tableau= " + Arrays.toString(array));
System.out.println("List = " + list.toString());
Tableau= [A, B, C]
List = [A, B, C]
l'a fait! C'est facile.
... mais
ListToArray.java
//Omission
List<String> list = Arrays.asList(array);
list.add("D"); //Ajouter 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)
Obtenez une erreur
Essayez de faire revenir la classe
ListToArray.java
//Omission
List<String> list = Arrays.asList(array);
ArrayList<String> arrayList = new ArrayList<String>();
System.out.println("ArrayList régulier= " + arrayList.getClass());
System.out.println("Conversion à partir du tableau= " + list.getClass());
ArrayList régulier= class java.util.ArrayList
Conversion à partir du tableau= class java.util.Arrays$ArrayList
Hmm, quelque chose de différent!
java:java.util.Arrays.class
//Omission
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; //←←← est définitif!
ArrayList(E[] array) {
a = Objects.requireNonNull(array); //Copie de référence (note supplémentaire)
}
@Override
public int size() {
return a.length;
}
//Omission
}
Il retournait une version simplifiée d'ArrayList définie dans la classe interne de la classe Arrays!
java:java.util.AbstractList.class
public boolean add(E e) {
add(size(), e);
return true;
}
//Omission
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
ListToArray.java
//Omission
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(array));
arrayList.add("D");
System.out.println("Tableau= " + Arrays.toString(array));
System.out.println("List = " + arrayList.toString());
Nouvelle conversion de la zone de ArrayList. (Une addition)
Tableau= [A, B, C]
List = [A, B, C, D]
Arrays.asList () effectue simplement la conversion de type et la zone de mémoire référencée reste la même. (Une addition)
Recommended Posts