【发布时间】:2019-02-14 15:01:43
【问题描述】:
在 Java(如果你知道的话,还有 C#)中是否有一个可以迭代的集合数据结构,具有以下属性:
- 可以删除当前元素而不影响当前迭代器(已启动的迭代器的其余迭代)。
- 可以添加新元素,但也不会影响当前迭代器 - 在当前迭代器的迭代仍在进行时,不会将其作为迭代值包含在内。在我的例子中,每次迭代只会添加一个新元素,但在从可迭代对象中获取新迭代器之前,不会看到任何元素。
- 元素的顺序无关紧要。
实际上,有一个传入列表和一个传出项目列表。传入的列表被迭代,一些被复制到一个新的列表中。一些新元素可以在迭代期间添加到新列表中。迭代结束后,旧的传入列表被新的传出列表替换。这整个过程本身就是一个循环。
因此,与具有这些添加/删除属性的集合对象相比,每次将元素复制到新构建的集合对象似乎效率低下。
我在想某种队列,它可以让我预览当前项目,然后将其出列或不退出,然后移至下一个项目。而且我可以将更多项目添加到队列的头部,但不会看到它们,因为我正在向最后移动。双向链表可以具有这些属性,对吗?
如果您真的想知道它的用途,那就是在an answer of mine 中添加第二个大代码块。
【问题讨论】:
-
对于 C#:无法从枚举器上下文中修改通常的集合,但您可以查看 TPL Dataflow Library
-
在java中,见
List#listIterator和ListIterator -
你为什么要 C# 和 java?如果您在 java 中需要它,但 C# 中有一个类,它对您有什么帮助?
-
@TimSchmelter 这对我有帮助,因为我在这两种情况下都进行了编程,并且我想了解自己的学习情况。这并不奇怪,是吗?
-
我只能第二个@Misha,在Java中,只需使用一个可变列表并获得一个
ListIterator。但就地修改并不总是比填充新列表更有效。
标签: java c# collections iteration