@Test
public void testMap2() {
Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
addToMap(map, "cib", "1004", "2");
addToMap(map, "cib", "1005", "3");
addToMap(map, "cib", "1006", "1");
addToMap(map, "cib", "1007", "5");
addToMap(map, "icbc", "1004", "2");
addToMap(map, "icbc", "1005", "3");
addToMap(map, "icbc", "1006", "1");
addToMap(map, "icbc", "1007", "5");
System.out.println(map);
}
private void addToMap(Map<String, Map<String, String>> map, String key, String name, String value) {
if(map.containsKey(key)) {
map.get(key).put(name, value);
} else {
Map<String, String> map1 = new HashMap<String, String>();
map1.put(name, value);
map.put(key, map1);
}
}
答案 0 :(得分:13)
是的,它被称为Table
:
关联一组有序键的集合,称为行键 和列键,具有单个值。表格可能很稀疏,有 只有一小部分行键/列密钥对拥有一个 相应的价值 对应于给定行键的映射可以 被视为一个地图,其键是列。反过来也是 可用,将列与行键/值映射关联。注意, 在一些实现中,按列密钥的数据访问可以具有更少的数据 支持的操作或比行键数据访问更差的性能。
实施很少:
ArrayTable
(由二维数组支持,请参阅文档),ForwardingTable
(实现装饰器模式),HashBasedTable
(〜HashMap<R, HashMap<C, V>
),ImmutableTable
(不可变和无敌的),TreeBasedTable
(〜TreeMap<R, TreeMap<C, V>
)另请参阅Wiki explaining Guava new collection types,特别是代码示例:
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
展示了实现目标的干净方式。