【发布时间】:2020-06-09 15:30:58
【问题描述】:
我正在尝试基于共享一个或多个公共元素来更新一组 Set,当两个元素具有一个(或多个)公共元素时,它们将组合为一个元素,依此类推。
例如:
输入:{{1,2}, {3,4,5}, {2,4}, {7,8}}
输出应该是:{{1,2,3,4,5}, {7,8}}
输入:{{1, 2}, {5, 8, 9}, {3, 4, 5}, {2, 4, 7}, {7, 8}}
输出应该是:{{1, 2, 3, 4, 5, 7, 8, 9}}
这是我的 Java 实现,
static boolean hasCommon(HashSet<Integer> s1, HashSet<Integer> s2)
{
for (Integer i : s1)
{
if (s2.contains(i))
return true;
}
return false;
}
static HashSet<HashSet<Integer>> updateElements(HashSet<HashSet<Integer>> newSetofSets)
{
Iterator<HashSet<Integer>> it = newSetofSets.iterator();
while (it.hasNext())
{
HashSet<Integer> s1 = it.next();
Iterator<HashSet<Integer>> it2 = it;
while (it2.hasNext())
{
HashSet<Integer> s2 = it2.next();
System.out.println("s1 = " + s1.toString() + ", s2 = " + s2.toString());
System.out.println(newSetofSets.toString());
if (hasCommon(s1, s2))
{
for (Integer i : s2)
{
s1.add(i);
}
it2.remove(); // remove s2 after adding its elements to s1.
System.out.println(newSetofSets.toString());
}
}
System.out.println(newSetofSets.toString());
}
return newSetofSets;
}
对于输入:[[1, 2], [5, 8, 9], [3, 4, 5], [2, 4, 7], [7, 8]]
我明白了,
[[1, 2, 4, 7, 8], [5, 8, 9], [3, 4, 5]]
it 完成后,第一个迭代器 it 不会移动到下一个元素。
我们将不胜感激任何解决此问题的帮助。谢谢。
【问题讨论】:
-
请记住,从您正在循环的集合中添加/删除项目并不是一个好的做法。
-
感谢您的信息,但它应该有一些解决方案。我需要学习。