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