2011-01-12 10 views
7

Al hacer algo así comoCrear una "vista" de una lista de Java

// creating list1, adding items 
LinkedList slist = new LinkedList(); 
slist = subList(list1, 2,5); 

voy a tener un segundo objeto (una "copia" de los elementos 2 a 5 de "lista") devuelto por subLista y contenida en slist. Sin embargo, me gustaría tener algo que solo me dé una "vista" de list1, sin crear un objeto nuevo y sin asignar memoria nueva, por razones de rendimiento/memoria.

Respuesta

12

creo List#subList hace exactamente lo que quiere:

Devuelve una vista de la parte de esta lista entre el fromIndex especificado, inclusive, y toIndex, exclusivo. (Si fromIndex y toIndex son iguales, la lista devuelta está vacía). La lista devuelta está respaldada por esta lista, por lo que los cambios no estructurales en la lista devuelta se reflejan en esta lista, y viceversa.

List slist = list1.subList(2, 5); 

Por supuesto, una nueva (envoltorio) objeto necesita ser creado, pero se volverá a utilizarse la estructura de datos de la lista, y todos los elementos. El contenedor solo hace un seguimiento de los punteros de inicio y final.

+0

Ah, ¿entonces crear "slist" solo creará un objeto envoltorio? – ptikobj

+0

Sí, 'slist' necesitará memoria asignada, pero no mantiene una copia de la lista original, solo apunta a ella. – Thilo

+0

y esta parte de la memoria asignada no será muy grande en comparación con la lista, ¿verdad? probablemente solo contenga las referencias "primera" y "última" de la sublista. – ptikobj

Cuestiones relacionadas