2011-01-12 10 views
7

Quando si fa una cosa del genereCreare una "vista" di un elenco Java

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

avrò un secondo oggetto (una "copia" degli elementi 2 a 5 di "lista") restituito dalla sottolista e contenuti in slist. Tuttavia, mi piacerebbe avere qualcosa che mi dia una "visione" di list1, senza creare un nuovo oggetto e senza allocare nuova memoria, per ragioni di prestazioni/memoria.

risposta

12

Penso List#subList fa esattamente ciò che si vuole:

Restituisce una vista della porzione di questa lista tra il fromIndex specificato, inclusivo, e toIndex, esclusivo. (Se fromIndex e toIndex sono uguali, l'elenco restituito è vuoto.) L'elenco restituito è supportato da questo elenco, quindi le modifiche non strutturali nell'elenco restituito si riflettono in questo elenco e viceversa.

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

Naturalmente, un nuovo (involucro) oggetto deve essere creato, ma la struttura di dati per la lista, e tutti gli elementi verranno riutilizzati. Il wrapper tiene traccia dei puntatori di inizio e fine.

+0

Ah, quindi creare "slist" creerà solo un oggetto wrapper? – ptikobj

+0

Sì, 'slist' avrà bisogno di avere un po 'di memoria allocata per questo, ma non mantiene una copia dell'elenco originale, solo puntatori in esso. – Thilo

+0

e questa porzione di memoria allocata non sarà molto grande rispetto alla lista, giusto? probabilmente conterrà solo i riferimenti "primo" e "ultimo" del sottolista. – ptikobj

Problemi correlati