Lo usi quando vuoi garantire che stai ricevendo dati ordinati in un parametro, o quando vuoi assicurare al consumatore del tuo metodo che stai fornendo dati ordinati.
Parametri
Se hai bisogno che i tuoi dati siano ordinati, chiedi che venga ordinato chiedendo l'interfaccia che corrisponde a ciò che ti serve. È probabilmente meno costoso per il metodo che ti invia i dati per dartelo ordinato (lo ottengono da un database e possono banalmente ordinarlo, ma invece lo hanno buttato in una HashMap
perché questo è quello che tutti usano) di quanto lo sia per devi prendere Map
e quindi aggiungerlo a SortedMap
.
Se ne hai bisogno, ordina di ordinarlo.
Valori di ritorno
Questo è un po 'più controverso ... ci sono diverse scuole di pensiero qui.
Se produce dati ordinati secondo la natura del tuo metodo e non hai un motivo non , torna indietro all'interfaccia che consente ai consumatori dei tuoi dati lavora con esso nella maggior parte dei modi senza dando loro un'implementazione concreta (che ti blocca).
Quel "che ti blocca" fa parte del controverso bit. Alcuni ritengono che dovresti restituire l'interfaccia meno restrittiva (più generale) quando possibile ( Map
anziché SortedMap
e Collection
anziché Set
o List
).
Ci tornerei con la cosa più utile per i consumatori.
Metterò qui l'avvertenza che se questo è qualcosa che sarà sempre ordinato, è una cosa ... se qualcuno potrebbe voler creare una sottoclasse più tardi e non averlo ordinato ... questa è un'altra storia. Pertanto, devi considerare questo come parte della progettazione per l'estensione . Se non verrà esteso mai otterrai una risposta da questa delibera ... se può essere estesa, c'è un'altra risposta possibile.
perché è un po 'sopra un disastro e la gente dice cose al riguardo nella revisione del codice?
Bene, principio di sostituzione di Liskov sottolinea che ciò renderebbe più difficile la sottoclasse più tardi. I parametri del metodo non possono essere rafforzati da un sottotipo e i valori restituiti non possono essere rilassati.
Restituendo un SortedMap
non si può rendere una sottoclasse successiva della classe restituire un tipo più debole. Inoltre, se si decide di restituire un tipo più debole in un secondo momento per qualche motivo, si tratta di un importante refactoring (cambiando tutte le SortedMap disponibili su Maps e eventualmente modificando le chiamate che utilizzano tale interfaccia in codice che deve gestire il più debole tipo).
I tuoi interni
In realtà non importa ciò che stai facendo all'interno del tuo codice. Usa una mappa ordinata ogni volta che hai dati ordinati e vuoi ordinarli in ordine. Soprattutto se stai facendo put
chiama su di esso in momenti diversi e vuoi che rimanga in ordine.
Ora, potresti essere tentato di utilizzare LinkedHashMap
invece se ottieni tutti i dati ordinati in una volta sola, inseriscili nell'ordine ordinato, quindi esegui solo remove
chiamate contro di essa se esegui qualche modifica. Non è sbagliato, e presenta alcuni vantaggi (ricerche O (1) piuttosto che ricerche O (log n)). Tuttavia, è piuttosto inflessibile fornendo solo get
e put
e nessuno degli altri metodi divertenti che SortedMap
può darti.
Btw, NavigableMap
In realtà, SortedMap
non ti dà molto di più oltre Map
. Ma c'è qualcos'altro ...
SortedMap
è stato sostituito da NavigableMap
da Java 1.6 (le due classi standard che implementano SortedMap
implementano anche NavigableMap
). NavigableMap ha tutti i tipi di chiamate di metodo divertenti che sono spesso abbastanza utili.