Многие публикуют код Pair
, который можно использовать в качестве ключа на карте ... Если вы пытаетесь использовать пару в качестве ключа хеширования (распространенная идиома), обязательно посмотрите * 1002 в Guava. *: http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#Table. Они дают следующий пример использования для ребер графа:
Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create();
weightedGraph.put(v1, v2, 4);
weightedGraph.put(v1, v3, 20);
weightedGraph.put(v2, v3, 5);
weightedGraph.row(v1); // returns a Map mapping v2 to 4, v3 to 20
weightedGraph.column(v3); // returns a Map mapping v1 to 20, v2 to 5
A Table
сопоставляет два ключа одному значению и обеспечивает эффективный поиск только для обоих типов ключей. Я начал использовать эту структуру данных вместо Map<Pair<K1,K2>, V>
во многих частях моего кода. Существуют массивы, деревья и другие реализации как для плотного, так и для разрозненного использования, с возможностью указания собственных промежуточных классов карты.