2013-07-09 19 views
6

Perché sono in grado di aggiungere elementi alla lista dopo l'assegnazione di valori da a Arrays.asListElementi inseriti in un elenco Java

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

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

http://stackoverflow.com/questions/4792160/arrays-aslist-doubt Questo vi aiuterà a capire cosa si sta facendo . – Mueretee

risposta

11

Arrays.asList(1,2,3,4) crea una "lista vista" su un array la cui dimensione non può cambiare. In questo modo possiamo usare e accedere a un array attraverso l'interfaccia List.

Se si desidera un elenco in cui è possibile aggiungere i valori, ma ancora utilizzare il comodo Arrays.asList(..), fare semplicemente:

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

E 'questo che ottenendo la visualizzazione elenco, possiamo eseguire operazioni come facciamo in un elenco? –

+0

Sì. Tutti i metodi dell'interfaccia 'List' sono disponibili ma alcuni hanno dei limiti: come' add' non funzionerà - perché è ancora una matrice. –

6

Arrays.asList restituisce una lista di dimensione fissa. L'aggiunta o la rimozione di elementi da questo elenco non è consentita, tuttavia è possibile modificare gli elementi all'interno di questo elenco utilizzando il metodo set.

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(); 
    } 
} 
2

As per docs

Restituisce un elenco di dimensioni fisse sostenuto dalla specificato array. (Le modifiche all'elenco restituito "write through" all'array.) Questo metodo funge da ponte tra API basate su array e raccolte, in combinazione con Collection.toArray(). L'elenco restituito è serializzabile e implementa RandomAccess.

Quindi dopo averlo creato non è possibile aggiungere elementi in esso.

0

asList(T... a) Restituisce un elenco di dimensioni fisse supportato dalla matrice specificata.

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); 
} 
Problemi correlati