2010-03-10 16 views
44

In Java, come è possibile creare una lettura di sola lettura ArrayList (in modo che nessuno possa aggiungere elementi, modificare o eliminare elementi) dopo l'inizializzazione?make ArrayList Read only

risposta

86

Passare la lista array in Collections.unmodifiableList(). Restituisce una vista non modificabile dell'elenco specificato. Utilizzare solo questo Elenco restituito e mai l'ArrayList originale.

+28

"... e utilizzare solo la lista restituita, e mai l'originale' ArrayList' "è un'aggiunta molto importante qui! Passare il 'ArrayList' a quel metodo non cambia magicamente l'oggetto. Restituisce solo un involucro non modificabile. –

+0

@Joachim Sauer - ottimo punto! –

+3

A volte si desidera mantenere l'originale 'ArrayList'. Questa può essere una tecnica eccellente per esporre una vista simile a un elenco di dati incapsulati all'interno di un oggetto. Le modifiche all'oggetto aggiorneranno la vista 'List', ma la vista stessa non accetta alcuna modifica. – Matthew

0

Sei sicuro di voler utilizzare ArrayList in questo caso?

Forse sarebbe meglio per popolare la prima volta un ArrayList con tutte le informazioni, e poi convertire il ArrayList in una matrice finale, quando il programma Java inizializza.

+0

HI Jama, ho trovato Collections.unmodifiableList() questo funzionerà come volevo. prova questo metodo, il suo semplice avanzamento – gmhk

+0

beh, sarò ... è fantastico! – Jama22

2

Passare l'oggetto elenco a Collections.unmodifiableList(). Vedi sotto un esempio di esempio.

import java.util.*; 

    public class CollDemo 
    { 
     public static void main(String[] argv) throws Exception 
    { 
      List stuff = Arrays.asList(new String[] { "a", "b" }); 
      List list = new ArrayList(stuff); 
      list = Collections.unmodifiableList(list); 
      Set set = new HashSet(stuff); 
      set = Collections.unmodifiableSet(set); 
      Map map = new HashMap(); 
      map = Collections.unmodifiableMap(map); 
      System.out.println("Collection is read-only now."); 
     } 
    } 
0

passare l'oggetto di raccolta per il suo equivalente funzionalità immodificabile di Collezioni classe codice seguente mostra l'uso di unmodifiableList

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 


public class Temp { 

    public static void main(String[] args) { 

     List<Integer> objList = new ArrayList<Integer>(); 
     objList.add(4); 
     objList.add(5); 
     objList.add(6); 
     objList.add(7); 

     objList = Collections.unmodifiableList(objList); 
     System.out.println("List contents " + objList); 

     try { 
      objList.add(9); 
     } catch(UnsupportedOperationException e) { 
      e.printStackTrace(); 
      System.out.println("Exception occured"); 
     } 
     System.out.println("List contents " + objList); 
    } 

} 

stesso modo è possibile creare altre collezioni immodificabile così

  • Collezioni .unmodifiableMap (mappa);
  • Collections.unmodifiableSet (set);