Domanda

E 'la decisione da parte di Google simile a quello per SortedMultiSet (domanda StackOverflow) o è perché non v'è alcun uso di MultiKeyMap?

Sono consapevole del fatto che un supplente per MultiKeyMap può essere quella di utilizzare una classe personalizzata come una chiave che contiene le chiavi multiple come i suoi membri della classe. Al contrario, mi piace il concetto di specificare più chiavi quando si chiama il get del MultiKeyMap.

La versione di Apache di MultiKeyMap è grande, ma io sono gravemente mancante Generics e quindi guardato in Google Collezioni per una moderna implementazione di esso. Se qualcuno ha qualche idea del perché Google non ha ancora sostenuto o c'è un'alternativa migliore per esso quindi si prega di rispondere.

È stato utile?

Soluzione

Abbiamo una bella realizzazione di una mappa a due livelli, che noi chiamiamo un "tavolo" (K1 è la "chiave riga" e K2 è la "chiave colonna"), e noi non abbiamo ottenuto è rilasciato ancora. Passato due chiavi, però, è rendimenti decrescenti.

Altri suggerimenti

A proposito, la risposta accettata è stato risposto nel marzo 2010, ma a partire da settembre 2010 Guava incluso Table.

Credo che i generici potrebbe essere la showstopper per l'attuazione qui. Se si guarda solo l'interfaccia Map ci sono specificatori generici per il tipo di chiave (K) e il tipo di valore (V). Non credo che sarebbe possibile specificare utilizzando farmaci 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 esso, tutto è inline. E 'davvero un dettaglio di implementazione. Ma per utilizzare le collezioni di Google una classe personalizzata per eseguire la stessa cosa potrebbe funzionare più o meno allo stesso modo sono sicuro di implementare hashCode () e equals ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top