Nella maggior parte dei casi, quando le stringhe all'interno dell'array non sono patologiche e non includono virgole seguite da uno spazio, è possibile utilizzare Arrays.toString()
come chiave univoca. Ad esempio, il tuo Map
sarebbe un Map<String, T>
. E il get/put per una serie myKeys[]
sarebbe
T t = myMap.get(Arrays.toString(myKeys));
myMap.put(Arrays.toString(myKeys), myT);
Ovviamente si poteva mettere in qualche codice wrapper se lo si desidera.
Un piacevole effetto collaterale è che la chiave è ora immutabile. Ovviamente, cambierai i tuoi array myKeys e poi proverai uno get()
, non lo troverai.
Hashing of Strings è altamente ottimizzato.Quindi la miaè che questa soluzione, sebbene sia un po 'lenta e pesante, sarà più veloce e più efficiente in termini di memoria (meno allocazioni di oggetti) rispetto alla soluzione @Ted Hopp che utilizza una lista immutabile. Basti pensare se lo Arrays.toString()
è unico per le tue chiavi. In caso contrario, o in caso di dubbio, (ad esempio, la stringa [] deriva dall'input dell'utente) utilizzare l'elenco.
No; gli array non eseguono l'override di 'hashCode()'. – SLaks
Strettamente correlato a una [domanda simile su 'Set's] (http://stackoverflow.com/questions/9841934/how-to-make-a-set-of-array-in-java). – Raedwald