草庐IT

ITERATOR

全部标签

java - 为什么 iterator.hasNext 不适用于 BlockingQueue?

我试图在BlockingQueue上使用迭代器方法,发现hasNext()是非阻塞的-即它不会等到添加更多元素,而是在没有元素时返回false。下面是问题:这是糟糕的设计还是错误的期望?有没有办法使用阻塞BLockingQueue的方法与它的父Collection类方法(例如,如果某些方法期望一个集合,我可以通过一个阻塞吗排队希望其处理将等到队列有更多元素)这是一个示例代码块publicclassSomeContainer{publicstaticvoidmain(String[]args){BlockingQueuebq=newLinkedBlockingQueue();SomeCo

Java - HashSet 实现不支持 remove() 的迭代器的最佳方式

我有一个使用HashSet的类,我希望该类实现Iterable,但是我不希望类迭代器支持remove()方法。HashSet的默认迭代器是HashSet.KeyIterator,它是HashSet类中的私有(private)类,所以我不能简单地扩展它并且覆盖删除方法。理想情况下,我想避免为KeyIterator编写包装类,但我不知道如何才能以任何其他方式轻松简单地实现我自己的迭代器。有什么想法吗?干杯,皮特 最佳答案 java.util.Collections.unmodifiableSet(myHashSet).iterator(

java - 从 HashMap 中提取值

我试图通过HashMap的工作来学习和理解。所以我创建了这个hashmap来存储某些值,这些值在使用Iterator显示时给我输出为1=22=33=4等等。我使用Iterator.next()函数获得此输出。现在我真正怀疑的是,由于迭代器对象返回的这个值的类型,如果我只需要提取上述等式的右侧值,是否有任何函数?像子串一样的东西。有什么方法可以让我得到结果234任何帮助将不胜感激。提前致谢。 最佳答案 我会用类似的东西Mapmap=newHashMap();for(intvalue:map.values())System.out.pr

java - ListIterator 以前的方法不起作用

packagewrap;importjava.util.*;publicclassArrayListDemo{publicstaticvoidmain(String[]args){ArrayLista=newArrayList();a.add("B");a.add("C");a.add("D");ListIteratori=a.listIterator();while(i.hasPrevious()){System.out.println(i.previous());}}}该程序对于hasNext()和next()方法工作正常,但对于hasPrevious()和previous()它显

java - 如何使用 JAVA 8 从 map 中获取第一个键值?

至于现在我在做什么:MapprocessedItem=processedItemMap.get(i);Map.EntryentrySet=getNextPosition(processedItem);Itemkey=entrySet.getKey();Booleanvalue=entrySet.getValue();publicstaticMap.EntrygetNextPosition(MapprocessedItem){returnprocessedItem.entrySet().iterator().next();}有没有更简洁的方法用java8来做到这一点?

java - 为什么java.util.Collection不直接定义next(), hasNext()?

如果Collection定义了hasNext()而不是iterator().hasNext(),我们可以更轻松地编写循环:while(collection.hasNext()){…}代替:Iteratorit=collection.iterator();While(it.hasNext()){…}当然,我知道存在循环for(Ee:collection)的简单方法。为什么接口(interface)Iterator存在? 最佳答案 因为对于同一个Collection对象,您可以同时拥有多个有效的Iterator对象。这很有用。如果Col

java - 如何以相反的顺序迭代 LinkedList 元素?

我是Java集合的新手,我的疑问是为什么我不能反向遍历链表中的元素。下面我将解释我做了什么,请澄清我的疑问。我为正向迭代创建了接口(interface)iterator,为反向迭代创建了listiterator。为什么向后迭代不起作用?我不能在同一个程序中使用iterator和listiterator接口(interface)来向前和向后迭代遍历一组元素吗?代码片段:importjava.util.*;classNewClass{publicstaticvoidmain(Stringargs[]){LinkedListobj=newLinkedList();obj.add("vino"

Java Iterator实现编译错误: does not override abstract method remove()

为什么会出现以下编译错误:LRIterator不是抽象的,不会覆盖java.util.Iterator中的抽象方法remove()注意,实现是针对链表的publicIteratoriterator(){returnnewLRIterator();}privateclassLRIteratorimplementsIterator{privateDLLNodeplace;privateLRIterator(){place=first;}publicbooleanhasNext(){return(place!=null);}publicObjectnext(){if(place==null)

java - 数组、列表、集合和映射是可迭代的。还有什么?

即使只有List和Set实现了接口(interface)Iterable,我相信array,list,set和map都是所有iterable对象,因为我们可以通过foreach循环使用它们:for(Strings:newString[0]);for(Strings:newArrayList());for(Strings:newHashSet());for(Entryentry:newHashMap().entrySet());Map的情况可能有点不同,但让我们将其视为键值列表(它实际上是什么)。从可迭代的理解开始,我是否在以下方法中缺少类型?publicbooleanisIterabl

java - Set.contains() 如何决定它是否是一个子集?

我希望下面的代码能给我一个子集和一个补充集。但实际上,结果显示“错误:这不是一个子集!”it.next()得到什么以及如何修改我的代码以获得我想要的结果?谢谢!packageChapter8;importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;publicclassThree{intn;Setset=newHashSet();publicstaticvoidmain(Stringargs[]){Threethree=newThree(10);three.display(three.set);Sette