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
44
A
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.
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.
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);
Problemi correlati
- 1. form symfony2 read only
- 2. Entity Framework read only collections
- 3. Read-Only List in C#
- 4. Read only table in mysql
- 5. Read Only DB Connection Strings
- 6. Jython AttributeError: read-only attr
- 7. Django Resto quadro Read Only Modello Serializer
- 8. Windows 7 inetpub wwwroot read only
- 9. Read Only Widget di testo in python3-tkinter; multipiattaforma
- 10. Semantica Immutability/Read-only (particolare C# IReadOnlyCollection <T>)
- 11. Android: errore di trasferimento: Read-only file system
- 12. Perché gli argomenti lambda vengono passati dal valore read-only in C++ 11?
- 13. read slave, setup master read-write
- 14. FORTRAN READ()
- 15. Read & scrittura array di Parcelable oggetti
- 16. Pylint only Valutazione globale
- 17. Silverlight Vertical only ScrollViewer?
- 18. Heroku worker only app
- 19. mysql dump tables only
- 20. ZBar Scanner QR only
- 21. grep --ignore-case --only
- 22. ArrayList contiene un altro ArrayList
- 23. perché "make" prima di "make install"
- 24. Java: filtro ArrayList efficiente?
- 25. PHP read Javascript array
- 26. Groovy Console read input
- 27. TcpClient.GetStream() Read() vs. TcpClient.Client.Receive()
- 28. Directory.EnumerateFiles read order (C#)
- 29. Extract/read React propTypes
- 30. Spiegazione read-output-
"... 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. –
@Joachim Sauer - ottimo punto! –
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