2014-12-08 5 views
6

Sto cercando una raccolta che sarebbe una sorta di elenco che consente le lacune. Gli obiettivi sono:Esiste un elenco di implementazione che consentirebbe lacune?

  • ogni elemento ha un indice nella raccolta che è significativo.
  • la raccolta deve essere sparsa e non continua; le sue dimensioni dovrebbero restituire il numero di elementi corretti, quindi la soluzione alternativa di inizializzazione con null non funzionerebbe.
  • subList metodo è desiderabile sottoelenchi accesso secondo intervalli indice

uso Esempio casi:

List<Integer> list = /* ? */; 
list.add(0,5); 
list.add(1,4); 
list.add(5,3); 
for(Integer i : list) 
{ 
    System.out.print(i + " "); 
} 
/* desired output : "5 4 3 "*/ 
+1

Il vostro requisito per il metodo di conflitti 'size' con l'interfaccia' list'. Il metodo 'get' su' List' * ha * per lanciare una 'IndexOutOfBoundsException' dell'indice < 0 or >' size() ', quindi il metodo' size() '* ha * per restituire l'elemento indicizzabile più alto che può essere recuperato con il metodo 'get()'. –

risposta

5

Utilizzare un Map<Integer,Integer>. La chiave sarebbe il tuo indice e il valore il valore della lista.

Per il vostro requisito di sottolista, forse TreeMap<Integer,Integer> funzionerebbe, in quanto mantiene le chiavi ordinate e facilita l'iterazione su un sottoelenco.

Ovviamente questo significa che non è possibile utilizzare l'interfaccia List. Se è necessario utilizzare l'interfaccia List, è possibile rendere l'implementazione List supportata da un TreeMap (ad esempio, list.add(5,3) chiamerebbe map.put(5,3)).

+4

Tutto ciò che implementa l'interfaccia 'NavigableMap' (che include' TreeMap') dovrebbe fare, in quanto fornisce la [sottmap] (http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap .html # subMap% 28K,% 20boolean,% 20K,% 20boolean% 29) metodo che soddisfa la necessità dell'OP per i sottolisti. – curiousinternals