我遇到过很多需要迭代器的问题。通常,它们很简单,您已经拥有可以遵循的底层数据结构。其他时候,它会变得更复杂。一个示例是使用中序遍历在没有父链接的情况下迭代BST。这需要您执行以下操作:在构造函数中创建一个堆栈。迭代到最左边的节点。存储有更多节点要访问以便从hasNext()轻松返回。存储要访问的下一个节点,以便从next()轻松返回。您可以在hasNext()或next()中定位下一个节点。您还可以在构造函数中或在对hasNext()的第一次调用中定位第一个节点。我的问题对于在迭代器实现中在哪里完成大部分工作,是否有标准或最佳实践?一种方式比另一种方式“更清洁”吗?
staticvoidmyMethod(Mapmap){Iterator>it=map.entrySet().iterator();}我看到以下编译错误:类型不匹配:无法从Iterator>转换至Iterator> 最佳答案 尝试Iterator>it=map.entrySet().iterator();您的尝试不起作用的原因有点难以理解,特别是因为Iterator不消耗任何T(即它没有将T作为参数的方法)。您不能分配Iterator>到Iterator>出于同样的原因,你不能分配Iterator>到Iterator>.capture
我注意到Java的Iterator(接口(interface))类似于C#的IEnumerable,但是有没有办法像这样使用它:privateIEnumerableit;it=labels.iterator();在Java中我可以这样做:privateIteratorit;it=labels.iterator();Java的Iterator接口(interface)在C#中的等效项是什么? 最佳答案 它不经常使用,但类比是IEnumerator界面:varenumerator=labels.GetEnumerator();.NET的
我的main方法中有以下代码,当我遍历Set并打印值时,这些值已经排序。这是什么原因?Setset=newHashSet();set.add(2);set.add(7);set.add(3);set.add(9);set.add(6);for(inti:set){System.out.println(i);}输出:23679 最佳答案 纯属巧合。AHashSet不保留或保证任何顺序。Itmakesnoguaranteesastotheiterationorderoftheset;inparticular,itdoesnotguara
我正在尝试并发循环Java迭代器,但在寻找执行此操作的最佳方法时遇到了问题。这是我没有尝试同时做任何事情的地方。Longl;Iteratori=getUserIDs();while(i.hasNext()){l=i.next();someObject.doSomething(l);anotheObject.doSomething(l);}我在非迭代器对象上所做的事情之间应该没有竞争条件,所以我不太担心。我只是想通过不按顺序执行迭代器来加快循环迭代器所需的时间。提前致谢。 最佳答案 一种解决方案是使用执行程序来并行化您的工作。简单的例
有类似的问题,但不完全是我想问的。我想问一下Iterator如何检查修改。Thislink说它的实现存在于AbstractList类中,其中定义了一个int变量modCount,它提供列表大小已更改的次数。该值在每次next()调用中使用,以检查函数checkForComodification()中的任何修改。但我实在是看不懂。如果仅在每次下一次调用后才检查该值,那么如果我在同一个调用中先删除然后添加,则大小不会改变,modCount也不应该改变。但是在同一个循环迭代中删除和添加也会抛出异常。 最佳答案 如果您查看Collectio
publicstaticvoidmain(Stringargs[])throwsJSONException{JSONObjectjson=newJSONObject();json.put("name","abcgdj");json.put("no","1234");json.put("contact","6748356");Iteratorkeys=json.keys();System.err.println(Iterators.size(keys));System.err.println(Iterators.size(keys));}在这段代码中,在执行Iterators.size(
我有一个使用HashSet的类,我希望该类实现Iterable,但是我不希望类迭代器支持remove()方法。HashSet的默认迭代器是HashSet.KeyIterator,它是HashSet类中的私有(private)类,所以我不能简单地扩展它并且覆盖删除方法。理想情况下,我想避免为KeyIterator编写包装类,但我不知道如何才能以任何其他方式轻松简单地实现我自己的迭代器。有什么想法吗?干杯,皮特 最佳答案 java.util.Collections.unmodifiableSet(myHashSet).iterator(
我有一个字符串迭代器。为了排序,我需要从中创建一个列表并使用Collections.sort(list)对其进行排序。有什么简单的方法可以对迭代器进行排序。 最佳答案 迭代器不是容器,它是一种遍历容器元素的实用程序。因此,如果您只能访问迭代器,则无法更改迭代器的创建者定义的迭代顺序。如果您无法更改原始容器,则必须将迭代器传递的元素收集到一个新的集合中,并在其中对它们进行排序。(了解迭代器的可能性的一个好方法是查看JDK类的源代码或实现自己的迭代器) 关于java-对字符串的迭代器进行排序
有人知道开源BufferedIterator,它在后台线程上急切地获取下N个元素吗?这是animplementation来自TechRepublicarticle,但我认为它尚未经过彻底测试。Iterators.buffer(IteratortoBuffer,intbufferSize)是对Guava的一个很好的补充,有没有考虑过? 最佳答案 链接的实现似乎是为Java4编写的,可以使用guava和java.util.concurrent进行一些简化:importjava.util.Iterator;importjava.util.