Tag: 迭代器

Java并行工作迭代器?

我正在寻找一个类,我可以覆盖一个方法来完成工作,并像迭代器一样返回结果。 像这样的东西: ParallelWorkIterator itr = new ParallelWorkIterator(trials,threads) { public Result work() { //do work here for a single trial… return answer; } }; while (itr.hasNext()) { Result result = itr.next(); //process result… } 这主要用于像monte carlo模拟这样的东西,但我不想每次都要处理设置线程池和管理返回线程。 我推出了自己的课程, 希望能够完成这一课,但我对此并不充分,并且认为我会检查这样的事情是否已经存在。 编辑:要清楚,我希望它在后台运行并在每个工作方法返回后排队结果,直到所有试验都完成。 因此,下一个方法可能会等待返回,直到队列中出现结果。

如何在Java中复制迭代器?

我们有一个元素列表,并且有一个非常简单的碰撞检测,我们检查每个对象与其他每个对象。 检查是可交换的,所以为避免重复两次,我们将在C ++中执行此操作: for (list::iterator it0 = list.begin(); it0 != list.end(); ++it0) { for (list::iterator it1 = it0; it1 != list.end(); ++it1) { Test(*it0, *it1); } } 这里的关键是副本 it1 = it0 你会怎么用Java写这个?

如何增强for-loop?

我一个接一个地迭代String对象列表的元素: LinkedList list; // add values to the list here for (int i = 0; i < list.size(); i++) System.out.println(list.get(i)); 在这里,每次我在列表上调用get()时,列表从其一端一直迭代到第i个元素 – 因此上述循环的复杂度为O(n ^ 2)。 是一个。)与上面的增强型for循环相同,或者b。)是for循环保持指针的最后位置,因此下面循环的复杂性是O(n)? for (String s:list) System.out.println(s); 如果上面的情况(b) – 我认为是 – 在列表中使用迭代器是否有任何优势。 这是一个简单的迭代 – 没有来回。 编辑:..我的列表操作是只读的。 TIA。

类型不匹配:无法从Item转换为Item

public class RandomizedQueue implements Iterable { private Item[] s; private int N; public Iterator iterator() { return new RQIterator(); } private class RQIterator implements Iterator { private Item[] copy; private int newItems; public RQIterator() { copy = (Item[]) new Object[N]; for (int i = 0, k = 0; i < s.length; i++) { if (s[i] […]

使用iterator和iterator.remove()时出现ConcurrentModificationException

private int checkLevel(String bigWord, Collection dict, MinMax minMax) { /*value initialised to losing*/ int value = 0; if (minMax == MinMax.MIN) value = 1; else value = -1; boolean go = true; Iterator iter = dict.iterator(); while(iter.hasNext()) { String str = iter.next(); Collection inds = naiveStringSearch(bigWord, str); if(inds.isEmpty()) { iter.remove(); } for (Integer i : […]

具有类型混淆的自定义Java迭代器

我有一个generics类捆绑一个对象和一个订单: public class OrderedObject { private int order; private T object; public OrderedObject(int order, T object) { this.order = order; this.object = object; } public int getOrder() { return order; } public T getObject() { return object; } } 我开发了一个Set实现,它存储OrderedObject实例,并希望按照内置顺序强制执行的顺序生成Iterator : public class OrderedObjectSet extends AbstractSet implements Set { Set<OrderedObject> s = new HashSet<OrderedObject>(); public […]

迭代时允许对Map进行哪些基本操作?

假设我在Java中迭代一个Map …我不清楚在迭代过程中我能对Map进行什么操作。 我想我在Javadoc中为Iterator接口删除方法的这个警告感到困惑: […]如果在迭代正在进行中以除调用此方法之外的任何方式修改基础集合,则未指定迭代器的行为。 我确信我可以毫无问题地调用remove方法。 但是在迭代Map集合时,我可以: 使用Map类put方法更改与键关联的值(使用现有键放置)? 使用Map类put方法添加一个新条目(使用新密钥放置)? 使用Map类删除方法删除条目? 我的猜测是我可以安全地做#1(放到现有密钥)但不安全做#2或#3。 提前感谢您对此的任何澄清。

返回java中iterator()方法的类型

我是Java的新手,也是学习过程中的新手。 我需要一个有效理论支持的以下问题的答案。 考虑以下行 – Iterator itr = al.iterator(); 其中al是ArrayList(class)类型的一些集合对象。 我想知道这里的返回类型是什么 al.iterator() 它不一定是原始数据类型,然后它可以是一个对象 ,但由于每个对象都属于一个类,因此它属于哪个类 。 文档和书籍等说它有返回类型的迭代器。 但Iterator是一个界面。 另一方面,我们说接口不能有直接对象。 虽然接口变量可以引用实现它的类或类的对象。 – 所以上面的语法是正确的(因为Iterator变量itr可以用来引用实现它的某个类的对象)。 但在不动产中它是哪一类的对象? 并且可以用该类的引用变量替换itr将不会导致错误(我已经尝试用上面的行中的Array 。类的ref。变量替换itr ,但这会导致错误)。 我也经常在genericsforms中使用这种语法,但不知道这背后的理论。 我想我在这里缺乏一个非常基本的概念。 请纠正。

迭代时出现Java“ConcurrentModificationException”运行时错误.next()

根据运行时错误消息,exception发生在以下行中; VirusData v = iteratorVirusDB.next(); VirusData是一个带有构造函数和重载构造函数的类,其中包含有关数据库中每种病毒的特定信息,例如; 字符串vName 字符串vDefinition 重载 具有标记化定义的数组(以xLength分组分隔) 带LCS令牌的数组 漂浮等级 类型 iteratorVirusDB是的.iterator(),如下所示: Iterator iteratorVirusDB = virusDB.iterator(); VirusDB是和类型的ArrayList,我存储病毒对象(此时名称和def),以便我以后可以使用它们。 ArrayList virusDB = new ArrayList(); 最后,在使用上述所有解释的方法中发生错误: private void selectDabataseMouseClicked(java.awt.event.MouseEvent evt) { while(iteratorVirusDB.hasNext()) { VirusData v = iteratorVirusDB.next(); //ERROR LINE String vSig = v.signature; v.tokens = tokenize.raw(vSig, true, tLength); … } … } 我可以真正做一些帮助和建议,如何解决这个问题,以使程序成功运行。 Bellow,完整的StackTrace: run: Exception […]

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

我浏览了Iterator.remove()的文档( http://java.sun.com/javase/6/docs/api/java/util/Iterator.html ),其中remove( )被描述为 void remove() 从底层集合中移除迭代器返回的最后一个元素(可选操作)。 每次调用next时,只能调用一次此方法。 如果在迭代正在进行中以除调用此方法之外的任何方式修改基础集合,则未指定迭代器的行为。 所以任何人都可以告诉“可选”是什么意思。 这是否会影响操作的稳健性?(与c ++一样,它不能保证操作的稳健性。) 为什么在这里明确指定了“可选”。 “修改”在第二行文档中意味着什么 如果修改了基础集合,则未指定迭代器的行为