Java 如何在迭代此哈希集时向哈希集添加元素?

Java 如何在迭代此哈希集时向哈希集添加元素?,java,hashset,Java,Hashset,我有一个如下的用例: SET is a Set of Integer with size N for i in SET (I mean only iterate the Set of size N at start point): if i + 7 not in SET: SET.add(i + 7) return SET 除了使用辅助列表/集合来存储需要插入的元素外,如何使用Java HashSet实现这一点 @lucasvw在这里回避了根本问题-您需要以某种方式区

我有一个如下的用例:

SET is a Set of Integer with size N
for i in SET (I mean only iterate the Set of size N at start point):
    if i + 7 not in SET:
        SET.add(i + 7)

return SET

除了使用辅助列表/集合来存储需要插入的元素外,如何使用Java HashSet实现这一点

@lucasvw在这里回避了根本问题-您需要以某种方式区分原始值和添加的值,否则,循环将无限期运行,或者至少直到值溢出足够多,从而开始重复

做到这一点的最佳方法是确实有一个辅助集来保存所有要添加的值:

设置aux=original.stream.mapi->i+7.collectCollectors.toSet; 原件:addAllaux;
@lucasvw在这里回避了根本问题-您需要以某种方式区分原始值和添加的值,否则,循环将无限期运行,或者至少直到值溢出足够多,从而开始重复

做到这一点的最佳方法是确实有一个辅助集来保存所有要添加的值:

设置aux=original.stream.mapi->i+7.collectCollectors.toSet; 原件:addAllaux;
在迭代集合实例的内容时,不可能向集合实例添加内容;当对var e:set表示法使用foreach循环时,不允许修改,而对var i=set.iterator使用显式迭代器时;i、 hasNext…表示法,可以调用i.remove来除去当前元素。但在这种情况下,添加新元素仍然不起作用


尽管List知道一个特殊的迭代器类ListIterator,它也允许为var i=List.ListIterator添加条目表示法,但所有Java集合类都共享此行为;i、 hasNext…通过调用i.add–感谢@lucasvw提醒我这一点。

在迭代集合实例的内容时,不可能向集合实例添加内容;当对var e:set表示法使用foreach循环时,不允许修改,而对var i=set.iterator使用显式迭代器时;i、 hasNext…表示法,可以调用i.remove来除去当前元素。但在这种情况下,添加新元素仍然不起作用


尽管List知道一个特殊的迭代器类ListIterator,它也允许为var i=List.ListIterator添加条目表示法,但所有Java集合类都共享此行为;i、 hasNext…通过调用i.add–感谢@lucasvw提醒我这一点。

如果您不想自己制作副本,Java可以为您这样做:。它不会更快,也不会有任何神奇的效果,但您可以同时迭代原始文件并进行修改

然而,如果您想要一些高效的东西,那大概就是用新元素创建另一个集合,并在最后创建它们。根据集合的大小,跳过包含检查并将其留给合并可能会更快


如果您的数字是非负数且大小较低,则其or操作也可能需要查看。

如果您不想自己制作副本,Java可以为您这样做:。它不会更快,也不会有任何神奇的效果,但您可以同时迭代原始文件并进行修改

然而,如果您想要一些高效的东西,那大概就是用新元素创建另一个集合,并在最后创建它们。根据集合的大小,跳过包含检查并将其留给合并可能会更快


如果你的数字是非负的,并且数值的大小很小,那么它的or运算也可能是值得注意的。

如前所述,如果集合中有任何元素,这将运行一段时间forever@lucasvw是的,但我的观点是,如果我们忽略这一点,集合将无限增长。你想完成什么?@lucasvw是的,我知道。我想说的只是在开始时对集合进行迭代point@lucasvw字体为什么要永远这样?考虑到它会工作,但它不会工作,插入必须发生在当前光标位置的后面,可能是在最后,以使其无限期地运行。但是,如果插入点在第一个条目之前开始,它将很好地终止。对于最常用的基于散列的集合,新值可以插入当前光标位置之前或之后的任何位置,因此行为将完全不可预测。但因为它根本不起作用,所以这个讨论是假设性的……如前所述,若集合中有任何元素,这将运行一段时间forever@lucasvw是的,但我的观点是,如果我们忽略这一点,集合将无限增长。你想完成什么?@lucasvw是的,我知道。我想说的只是在开始时对集合进行迭代point@lucasvw字体为什么要永远这样?考虑到它会工作,但它不会工作,插入必须发生在当前光标位置的后面,可能是在最后,以使其无限期地运行。但如果插入点位于
在第一个条目之前开始,它将很好地结束。对于最常用的基于散列的集合,新值可以插入当前光标位置之前或之后的任何位置,因此行为将完全不可预测。但是,由于它根本不起作用,这个讨论是假设性的……使用列表迭代器,您可以添加元素,但OP是使用SetThank指定的。谢谢!我从来不知道listIterator有这样一个属性。使用listIterator可以添加元素,但OP是使用SetThank指定的!我从来不知道listIterator有这样的属性。