草庐IT

C++迭代器(iterator)

全部标签

java - 为什么java Iterator接口(interface)应该实现为内部类?

我最近看了一本书《TheJavaTutorials》第三版。如图所示,它讲的是内部类实现。在第3段中,它说“Stack类本身不应实现Iterator接口(interface),因为...”。我找不到Stack类不应该实现Iterator的任何理由。给出的原因并不普遍。你能解释一下吗? 最佳答案 从根本上说,迭代器是有状态的-它需要知道它在集合中指向的何处。这不属于集合本身的一部分——给出的解释是正确的……完全有可能有两个独立的迭代器对象,迭代同一个集合对象。如果集合本身实现了Iterator接口(interface),您将如何建模?

java - 是什么导致了 java.util.HashSet 和 HashMap.keySet() 类的 iterator() 排序有点不可预测?

六年前,我花了几天时间试图找出我的完美确定性框架随机响应的位置。在仔细检查整个框架确保它都使用相同的Random实例之后,我继续通过单步执行代码进行检查。这是高度重复的迭代自调用代码。更糟糕的是,该死的效果只有在完成大量迭代后才会出现。在+6小时后,当我在javadoc中发现HashSet.iterator()的一行表明它不能保证返回元素的顺序时,我终于束手无策。然后,我检查了我的整个代码库,并将HashSet的所有实例替换为LinkedHashSet。低看,我的框架突然变成了确定性的生活!啊!我现在又一次经历了同样的FREAKIN影响(至少这次只有3个小时)。无论出于何种原因,我都错

java - 一个迭代器,它改变并返回相同的对象。不好的做法?

我正在编写GC友好代码来读取并返回给用户一系列byte[]消息。在内部我重复使用相同的ByteBuffer这意味着我将重复返回相同的byte[]大部分时间。我正在考虑编写警告性javadoc并将其作为Iterator公开给用户.据我所知,它不会违反Iterator契约(Contract),但如果他们这样做,用户肯定会感到惊讶Lists.newArrayList(myIterator)并取回List填充了相同的byte[]在每个位置!问题:对于一个可能变异并返回相同对象的类来实现Iterator是否是不良做法界面?如果是这样,最好的选择是什么?“不要改变/重复使用你的对象”是一个简单的答

java - 如何处理 Iterable.forEach 中的 IOException?

我正在研究将一组对象写入文件的方法。为什么以下使用Iterable.forEach()的实现无法编译?在Eclipse中,我收到一条消息,指出未处理IOException。这特别令人困惑,因为我似乎确实在处理IOExceptions。publicvoidwrite(Iterableobjects){try(BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(newFileOutputStream("out.txt"),"UTF-8"));){objects.forEach((o)->bw.write(o.toString()

java - 实例和迭代。哪一个更好?

我想阅读文档并处理它们。每次迭代处理一个文档。哪种代码比较好?1.BufferedReaderbr;for(Filef:files){br=newBufferedReader(......);......}2.for(Filef:files){BufferedReaderbr=newBufferedReader(......);......}我的观点是哪一个在空间和速度方面更有效率? 最佳答案 在我看来,后者更为清晰。通常,更喜欢声明具有最小作用域的局部变量,理想情况下在声明时初始化它们。它不会直接影响性能-但会影响可读性和维护性,

java - 如何使用 Java 8 流迭代 x 次?

这个问题在这里已经有了答案:IsitpossibletouseStreams.intRangefunction?(3个答案)关闭6年前。我有一个老式的for循环来做一些负载测试:For(inti=0;i如何在没有for的情况下使用新的Java8流API来执行此操作?此外,流的使用使得切换到并行流变得容易。如何切换到并行流?*我想保留对i的引用。

java - 为什么 iterator.remove() 被描述为可选操作?

我浏览了Iterator.remove()的文档(http://java.sun.com/javase/6/docs/api/java/util/Iterator.html)remove()被描述为voidremove()Removesfromtheunderlyingcollectionthelastelementreturnedbytheiterator(optionaloperation).Thismethodcanbecalledonlyoncepercalltonext.Thebehaviorofaniteratorisunspecifiediftheunderlyingco

java - 我如何反向迭代 ArrayDeque?

如何反向迭代ArrayDeque?我通常会对数组执行此操作,但它不可索引。for(inti=delegate.size()-1;i>=0;i--){}谢谢 最佳答案 您可以使用方法descendingIterator()得到迭代ArrayDeque的迭代器反过来。Iteratorit=arrayDeque.descendingIterator();while(it.hasNext()){//dosomethingwithit.next()} 关于java-我如何反向迭代ArrayDequ

java - 如何确定 ArrayList 迭代器接下来将返回的对象类型?

我有一个ArrayList,我正在使用一个迭代器来遍历它。我需要找出下一个对象的类型:IteratorvehicleIterator=vehicleArrayList.iterator();while(vehicleIterator.hasNext()){//HowdoIfindthetypeofobjectinthearraylistatthispoint//forexample,isitacar,busetc...}谢谢 最佳答案 Objecto=vehicleIterator.next();if(oinstanceofCar)

java - IntStream 分步迭代

如何使用IntStream在步骤(3)中遍历数字范围(0-100)?我试过iterate,但这永远不会停止执行。IntStream.iterate(0,n->n+3).filter(x->x>0&&x 最佳答案 实际上range非常适合这个。IntStream.range(0,100).filter(x->x%3==0);//107,566ns/op[Average]编辑:Holgers的解决方案是执行速度最快的解决方案。由于下面的代码行IntStream.range(0,100).filter(x->x%3==0).forEach