7 votes

Ajout d'éléments à la liste Java

Pourquoi je ne parviens pas à ajouter un élément à la liste après avoir assigné des valeurs à Arrays.asList ?

List<Integer> sam = Arrays.asList(1,2,3,4);
sam.add(5);

for (Integer integer : sam)
{
  System.out.println(integer);
}

17voto

Andreas_D Points 64111

Arrays.asList(1,2,3,4) crée une "vue de liste" sur un tableau dont la taille ne peut pas changer. De cette façon, nous pouvons utiliser et accéder à un tableau par le biais de la fonction List interface.

Si vous voulez une liste dans laquelle vous pouvez ajouter des valeurs tout en utilisant la fonction pratique Arrays.asList(..) c'est tout simplement le cas :

List<Integer> sam = new ArrayList<>(Arrays.asList(1,2,3,4));

6voto

Adam Siemion Points 6314

Arrays.asList renvoie une liste de taille fixe. L'ajout ou la suppression d'éléments de cette liste n'est pas autorisé, il est cependant possible de modifier les éléments à l'intérieur de cette liste à l'aide de la fonction set méthode.

public static <T> List<T> asList(T... a) {
    return new ArrayList<T>(a); // this is not java.util.ArrayList
}

private static class ArrayList<E> extends AbstractList<E>
    implements RandomAccess, java.io.Serializable {
    ArrayList(E[] array) {
        if (array==null)
            throw new NullPointerException();
        a = array;
    }

    public E set(int index, E element) { 
        E oldValue = a[index];
        a[index] = element;
        return oldValue;            
    }

    // add() and remove() methods are inherited from AbstractList
}

public abstract class AbstractList<E> extends AbstractCollection<E> 
    implements List<E> {

    public E remove(int index) {
        throw new UnsupportedOperationException();
    }
    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }
}

2voto

Selon les documents

Retourne une liste de taille fixe soutenue par le tableau spécifié. (Cette méthode sert de passerelle entre les API basées sur les tableaux et celles basées sur les collections, en combinaison avec Collection.toArray(). La liste retournée est sérialisable et implémente RandomAccess.

Donc, après l'avoir créé, vous ne pouvez pas y ajouter d'éléments.

0voto

Subir Kumar Sao Points 4080

asList(T... a) Retourne une liste de taille fixe soutenue par le tableau spécifié.

List<Integer> sam = new ArrayList<Integer>();
sam.addAll(Arrays.asList(1,2,3,4));
sam.add(5);

for (Integer integer : sam)
{
  System.out.println(integer);
}

0voto

ftrujillo Points 344

Recherche dans la documentation de la méthode :

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T...)

La méthode Arrays.asList renvoie une liste de taille fixe. Vous ne pouvez donc pas ajouter d'éléments à l'aide de la liste.

Quoi qu'il en soit, la même question trouve une réponse ici :

doute Arrays.asList() ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X