如何在Java中迭代HashSet元素时覆盖该元素
在对某个HashSet元素进行迭代时,是否可以覆盖该元素(不一定是迭代的元素)。我想知道除了删除、编辑然后重新添加之外还有什么方法? 我问这个问题的原因是,在迭代时使用remove总是会给java带来一些好处。util。ConcurrentModificationException。我发现没有方法覆盖set元素
任何帮助都将不胜感激
谢谢
索姆纳特
你可以在下面搜索框中键入要查询的问题!
在对某个HashSet元素进行迭代时,是否可以覆盖该元素(不一定是迭代的元素)。我想知道除了删除、编辑然后重新添加之外还有什么方法? 我问这个问题的原因是,在迭代时使用remove总是会给java带来一些好处。util。ConcurrentModificationException。我发现没有方法覆盖set元素
任何帮助都将不胜感激
谢谢
索姆纳特
# 1 楼答案
您可以从} 执行删除操作。但是,这只允许您删除迭代中的当前项
Collection
中删除一个项(包括Set
),同时对其进行迭代,只要您使用Iterator
对其进行迭代并调用^{您不能删除另一项或添加另一项,因为这将导致
ConcurrentModificationException
,因为如果更改Set
,则不清楚如何对其进行迭代此外,与
List
不同的是,在Set
中谈论替换一个条目是没有意义的。在aList
中,项具有定义顺序,因此,例如,如果第二个条目是“a”,则可以将其替换为“B”。aSet
中的项没有顺序,因此不能直接用另一项替换,只能删除旧项并添加新项取决于您想做什么,您最好的方法可能是在
Set
的副本上循环:但是,您必须考虑这样一个事实,即您迭代的对象将是原始值,并且不会反映您所做的任何更改
如果这样做不行,那么找到另一种方法来处理
Set
中的项可能是有意义的,而不需要通过跟踪已处理的节点来简单地迭代它们这样做可能会有帮助,但可能会有所改进,具体取决于您所做的工作:
# 2 楼答案
没有办法做到这一点。因为替换一个元素基本上就是删除+插入。 这是一个集合,不是列表。例如,在一个集合{1,2}中有两个元素,您希望用{2}替换{1}。这是不可能的,因为结果集不能包含{2,2}-即两个相等的元素
# 3 楼答案
//我使用了番石榴系列代码。没有它也很简单
# 4 楼答案
只需将set转换为List并使用^{} ,完成此操作后,将其转换回
Set
或者在迭代时维护另一个
Set