2016-04-25 34 views
5

Sappiamo di poter utilizzareJava allineati collezione con un elenco secondario conteggio basata

Collections.sort 

per ordinare un elenco, dopo tutti gli elementi inseriti.

Ma se gli elementi vengono inseriti una volta, forse il SortedMap è più efficace?

Tuttavia, il SortedMap non ha il metodo subList.

Quello che mi serve è qualcosa come SortedMap in grado di inserire efficacemente una piccola quantità di elementi molte volte, e si può sempre ottenere un 1-1000 sottolista top-down con un'interfaccia Comparator.

Qualche suggerimento?

+0

questo [domanda] (http://stackoverflow.com/questions/8725387/why-is-there-no-sortedlist-in-java) potrebbe aiutare probabilmente. – zencv

+0

@zencv la domanda non menziona il 'subList', che esattamente quello che mi serve – rufushuang

+0

Non' NavigableSet' supporta quel tipo di subviews? Penso che metodi come "NavigableSet.subSet (start, end)" potrebbero probabilmente funzionare qui. –

risposta

1

Penso che un SortedSet è un NavigableSet, che a sua volta ha metodi come subSet, tailSet, headSet, ceiling e floor per questo tipo di problemi.

Così si potrebbe fare qualcosa di simile:

SortedSet<Integer> set = new TreeSet<>(Arrays.asList(0,1,2,3,4,5,6,7,8,9)); 
SortedSet<Integer> subset = set.subSet(3,7); 
System.out.println(subset); //[3,4,5,6] 

Ovviamente è possibile creare voi TreeSet con qualunque Comparator che vuoi, ed eseguire le ricerche in modo che trovi più conveniente.

Comparator<Integer> reverse = Collections.reverseOrder(); 
SortedSet<Integer> set = new TreeSet<>(reverse); 
//same thing here 
+0

Questa è una risposta SBAGLIATA. Tutti i sottoinsiemi/coda/testa ... e il Comparatore sono BASATI SU VALORE, non in base al CONTO. – rufushuang

+0

@rufushuang Un commento molto migliore sarebbe stato: "Edwin, poiché i comparatori sono basati sul valore, come lo sono tutti i metodi che hai suggerito, come pensi che potrei ottenere una serie costante di elementi dal set allora" ?. Puoi vedere che il mio stile di commento mi avrebbe incoraggiato a tornare e cercare di migliorare o correggere la mia risposta. Puoi prendere più mosche con il miele di te con l'aceto. –