【发布时间】:2012-09-12 00:10:25
【问题描述】:
我正在寻找将给定集合划分为不相交子集的代码。例如,一组足球运动员,我们根据他们所属的球队对他们进行划分。最后我想要一份代表名单,即每支球队的一名球员。
所有足球运动员都认识他们球队中的所有其他球员——这与复杂性非常相关。所以,我目前关于如何做到这一点的想法如下(set 目前是LinkedHashSet<T>):
while (!set.isEmpty()) {
E e = set.iterator().next();
makeRepresentative(e);
set.remove(AllPlayersOnSameTeamAs(e));
}
但是,在 while 循环的每一步都构建一个新的迭代器感觉很奇怪。 LinkedHashSet 应该在内部具有某种firstElement() 函数(因为它的 LinkedList 行为),但由于某种原因我找不到如何做到这一点。我也尝试了一个 foreach 循环,但这导致了java.util.ConcurrentModificationException。
我应该如何正确地做到这一点?
【问题讨论】:
-
你确定
Set是你想要的吗? -
不,这正是你的做法。你的代码很好。 (具体来说,迭代器比你想象的要便宜得多,所以没什么大不了的。)
-
@LouisWasserman 我(通常)会更好地使用 HashSet 或 LinkedHashSet 吗?如果我从不超过元素 1,不确定是否值得开销?
-
坚持
LinkedHashSet即便如此。
标签: java iterator linkedhashset