Se ho una classe Pair come questa:
class Pair<K, L>{
public final K a;
public final L b;
public Pair(K obj1, L obj2){this.a = obj1; this.b = obj2;}
//...
}
Voglio associare un Float a ogni coppia di oggetti. Sono dello stesso tipo, quindi l'oggetto Pair sarà Pair<SomeType, SomeType> . È abbastanza naturale inserirli in Map<Pair<SomeType, SomeType>, Float> .
Il fatto è che non voglio che l'ordine degli oggetti in questa coppia sia importante. Voglio dire, una volta inserito un Pair<SomeType, SomeType> myPair tale che myPair.a = obj1 , myPair.b = obj2 nella Mappa, mi piacerebbe essere in grado di recuperare lo stesso valore con l'oggetto Pair invertito, tale che a = obj2 , b = obj1 .
Va bene inserire due coppie sulla mappa in entrambi gli ordini in questo caso, ovvero new Pair(a, b) e new Pair(b, a) ? In questo modo sono sicuro che indipendentemente da come gli oggetti sono ordinati nella coppia, otterrò il valore corretto. Tuttavia ci vuole il doppio spazio e crea problemi quando si tenta di rimuovere una coppia chiave-valore dalla mappa (ho bisogno di rimuovere entrambi). Forse è bello creare un metodo che si occuperà di inserire e rimuovere entrambe le coppie dalla mappa?