【发布时间】:2015-08-10 04:59:45
【问题描述】:
我正在尝试更新具有多对一关系的 Map 中的值。
| Keys | Values |
| 1 | {1, 2} |
| 2 | {1, 2} |
| 3 | {3} |
键 1 和 2 指的是同一组。我想合并键 2 和 3 的集合。这样我得到以下结果:
| Keys | Values |
| 1 | {1, 2, 3} |
| 2 | {1, 2, 3} |
| 3 | {1, 2, 3} |
有没有办法在不得到 O(n) 的情况下做到这一点?
到目前为止我所拥有的:
// Merge sets for keys i and j
Map[Integer, Set[Integer]] map;
map.get(i).addAll(map.get(j));
for(int key : map.get(j)) map.put(key, map.get(i));
【问题讨论】:
-
所以你想让你的所有键都指向同一个值集?
-
没错。我想改变 map.get(3) 的引用以引用与 map.get(1) 和 map.get(2) 引用的相同对象。编辑:在这种情况下很容易,因为您可以执行 map.put(3, map.get(1)) 或 map.put(3, map.get(2)),但我想要一个用于合并集合的通用解决方案密钥 j 与密钥 i 的集合。随着不相交的集合变大,它变得很棘手。
-
这个可行,但我不知道时间复杂度
Set<Integer> finalSet = new HashSet<>(); for(int key : map.keySet()) { Set<Integer> value = map.get(key); finalSet.addAll(value); } for(int key : map.keySet()) { map.put(key, finalSet); }
标签: java dictionary hashmap int set