草庐IT

Iterator

全部标签

java - 从顺序集合中获取随机元素

我与一个API交谈,该API为我提供了一个集合的java.util.Iterator。这意味着我可以对其进行迭代,但无法直接/随机访问元素。现在我的问题是:我想从这个集合中随机获取一个元素。我怎么做?我想我可以构建一个允许直接访问的新集合,但这不会消耗一点内存吗?我还可以遍历整个集合并为每个元素“掷骰子”,看看我是否应该采用该元素并退出迭代或继续。但是我需要集合的大小,但我无法从迭代器中获取它。提前致谢。 最佳答案 有一种方法可以在一次遍历集合时完成,它不会使用大量额外内存(只是集合中一个元素的大小加上一个float)。在伪代码中:

java - 为什么 Iterable<E> 和 Iterator<E> 在不同的包中?

Iterable在java.lang而Iterator在java.util.这是否有充分的理由,或者这仅仅是糟糕设计的产物?这似乎很奇怪,因为唯一一个Iterable有利于提供Iterator.编辑:一个潜在的原因是(then-)新引入的for-each循环。我想我的问题是,它们是等价的吗?for(Objecto:collection)...vsfor(Iteratoriter=collection.iterator();iter.hasNext();){o=iter.next();...如果是,那仍然不能解释为什么这两个类在不同的包中,因为编译器必须导入java.util无论如何使用

java - 在 TreeSet 上使用迭代器

情况:我有一个自定义对象的TreeSet,我还使用了一个自定义比较器。我创建了一个迭代器以用于此TreeSet。TreeSetts=newTreeSet();Iteratoritr=ts.iterator();while(itr.hasNext()){Customc=itr.next();//CodetoaddanewelementtotheTreeSetts}问题:我想知道,如果我在while循环中向TreeSet添加一个新元素,那么该新元素是否会立即排序。换句话说,如果我在while循环中添加一个新元素并且它小于我当前在c中持有的元素,那么在下一次迭代中我将在c中获得与上一次迭代中

java - 将枚举转换为迭代器

我在工作表上遇到了一个问题,即创建一个适配器以将枚举转换为迭代器。当我尝试运行以下代码时,出现空指针异常。importjava.util.Vector;importjava.util.Arrays;importjava.util.Enumeration;importjava.util.Iterator;publicclassConvertEnumeration{publicstaticvoidmain(String[]args){int[]ourArray={0,1,2,3,4,5,6,7,8,9};Vectorvector=newVector(Arrays.asList(ourArr

java - Scanner 为什么要实现 Iterator<String>?

我只是想知道为什么java.util.Scanner工具java.util.Iterator?Scanner实现了remove方法并抛出UnsupportedOperationException.但是类在实现接口(interface)时不应该履行接口(interface)的契约吗?实现iterator并添加一个抛出异常的方法有什么用?为什么不直接避免接口(interface)的实现并保持简单呢?有人可能会争辩说,它的定义是为了让可能扩展Scanner的类可以实现该方法,例如AbstractList有一个add抛出UnsupportedOperationException的方法。但是Ab

java - Apache Spark : Effectively using mapPartitions in Java

在当前名为HighPerformanceSpark的早期发行教科书中,Spark的开发人员指出:ToallowSparktheflexibilitytospillsomerecordstodisk,itisimportanttorepresentyourfunctionsinsideofmapPartitionsinsuchawaythatyourfunctionsdon’tforceloadingtheentirepartitionin-memory(e.g.implicitlyconvertingtoalist).Iteratorshavemanymethodswecanwrite

java - 遍历 Map 时允许对 Map 执行哪些基本操作?

假设我正在用Java迭代一个map...我不清楚在迭代它的过程中我可以对该map做什么。我想我对Iterator接口(interface)remove方法的Javadoc中的这个警告感到很困惑:[...]Thebehaviorofaniteratorisunspecifiediftheunderlyingcollectionismodifiedwhiletheiterationisinprogressinanywayotherthanbycallingthismethod.我确信我可以毫无问题地调用remove方法。但是在遍历Map集合时,我可以:使用Map类的put方法更改与键关联的

java - Guava 库 : is Iterators. cycle() 线程安全?

假设我有以下类(class):publicclassFoo{privateListlist=Lists.newArrayList(1,2,3,4,5);privateIteratoriterator=Iterators.cycle(list);publicvoidbar(){Integervalue=iterator.next();doSomethingWithAnInteger(value);}}如果Foo的实例同时被两个线程访问,我需要每个线程从iterator.next()获得不同的值。bar()方法是否必须同步?还是iterator.next()保证是线程安全的?在这个例子中,

java - 将多页 TIFF 图像拆分为单个图像 (Java)

一直在为这个撕毁我的头发。如何将多页/多层TIFF图像拆分为多个单独的图像?提供演示图像here.(更喜欢纯Java(即非native)解决方案。如果解决方案依赖于商业库则无关紧要。) 最佳答案 您可以使用Java高级成像库,JAI,使用ImageReader分割一个多页TIFF:ImageInputStreamis=ImageIO.createImageInputStream(newFile(pathToImage));if(is==null||is.length()==0){//handleerror}Iteratoritera

c# - 为什么 Iterator 定义 remove() 操作?

在C#中,IEnumerator接口(interface)定义了一种遍历集合并查看元素的方法。我认为这非常有用,因为如果你通过IEnumerable对于一个方法,它不会修改原始源代码。但是,在Java中,Iterator定义remove操作(可选!)允许删除元素。通过Iterable没有任何优势方法,因为该方法仍然可以修改原始集合。remove的可选性是refusedbequest的一个例子气味,但忽略它(已经讨论过here)我会对促使remove的设计决策感兴趣在接口(interface)上实现的事件。导致remove的设计决策是什么?正在添加到Iterator?换句话说,明确没有r