2010-03-03 11 views
5

La decisione di Google è simile a quella per SortedMultiSet(stackoverflow question) oppure perché non viene utilizzato lo MultiKeyMap?Perché Google Collections supporta MultiKeyMap come Apache Collections?

Sono consapevole che un'alternativa per MultiKeyMap può essere quella di utilizzare una classe personalizzata come chiave che contiene le chiavi multiple come membri della classe. Al contrario, mi piace il concetto di specificare più chiavi quando si chiama il risultato dello MultiKeyMap.

La versione di Apache di MultiKeyMap è ottima, ma mi manca decisamente la versione generica e quindi ho cercato nelle raccolte Google per una sua implementazione moderna. Se qualcuno ha un'idea del motivo per cui Google non lo ha ancora supportato o se esiste un'alternativa migliore, ti preghiamo di rispondere.

risposta

6

Abbiamo un'implementazione molto bella di una mappa a due livelli, che chiamiamo "tabella" (K1 è la "chiave di riga" e K2 è la "chiave di colonna"), e non l'abbiamo appena ottenuta rilasciato ancora. Le due chiavi passate, tuttavia, sono rendimenti decrescenti.

+2

bello avere ufficiale google-raccolta ragazzo rispondere :) Posso avere uno sneak peak in questa struttura dati 'tabella'? E perché non avere una mappa a 3 e 4 livelli? –

+0

@ kevin-bourrillion ha già rilasciato questa mappa a 2 livelli? – Cat

+0

sì, come indica la risposta più votata qui. La mia risposta dovrebbe essere non accettata. –

2

Penso farmaci generici potrebbe essere la showstopper per l'attuazione qui. Se guardi solo l'interfaccia Map ci sono degli specificatori generici per il tipo di chiave (K) e il tipo di valore (V). Non credo che sarebbe possibile specificarlo usando generici facilmente senza separare le implementazioni in più classi (una per ogni numero di componenti chiave).

si avrebbe bisogno di una classe per ogni:

MultiKeyMap2<K1,K2,V> 
MultiKeyMap3<K1,K2,K3,V> 
MultiKeyMap4<K1,K2,K3,K4,V> 
MultiKeyMap5<K1,K2,K3,K4,K5,V> 

L'implementazione sottostante è fondamentalmente facendo quello che suggeriscono (utilizzando una classe personalizzata). Tuttavia, non crea formalmente una classe per questo, tutto è in linea. È davvero un dettaglio di implementazione. Ma per usare le raccolte Google una classe personalizzata per eseguire la stessa cosa funzionerebbe nello stesso modo in cui sono sicuro di implementare hashCode() ed equals().

9

FYI, la risposta accettata è stata data risposta nel marzo 2010, ma a partire da settembre 2010 Guava incluso Table.

+0

puoi modificare la risposta accettata con le informazioni aggiornate che hai fornito qui? –

+0

@MonisIqbal Non dovresti farlo. Ecco [un post tra molti su Meta su questo argomento] (http://meta.stackoverflow.com/a/320293/1768232). Se non ti piace la risposta accettata, sottovalutala. Se ti piace il mio, vuoi farlo, ecco a cosa servono i pulsanti. Ma non dovresti soddisfare completamente la modifica della risposta di un altro, in assoluto, la funzione di modifica è per miglioramenti che non cambiano il contenuto. – durron597

Problemi correlati