java - 在增强的 for 循环中使用类

标签 java

我已经编写了一个实现 Collection 和 Iterable 的类,并且现在尝试通过增强的 for 循环运行它。您可以在这里找到它:LinkedQueue

该类的重点是能够使用 LinkedQueue.getNext() 遍历集合,这工作得很好。不过,我还希望能够使用 for 循环一次迭代这些值。当前代码:

LinkedQueue<String> queue = new LinkedQueue();
queue.add("Test one");
queue.add("Test two");
queue.add("Test three");
System.out.println("queue.size = " + queue.size());
System.out.println("contents:");
for (String s : queue) {
    System.out.print("Test: ");
    System.out.println(s);
}
System.out.println("contents (x9):");
for (int i = 0; i < 9; i++) {
    System.out.println(queue.getNext());
}

打印出这个:

queue.size = 3
contents:
contents (x9):
Test one
Test two
Test three
...etc...

看来 for 循环没有正确打印。我不认为这是大小问题,因为队列在开始之前的大小为 3。所以现在我的问题很可能是“可迭代方法出了什么问题”,它们是 hasNext()next()remove()(此队列不支持)。我做错了什么?

最佳答案

您的实现失败,因为当您(隐式)调用 iterator() 时,您的 itr 变量仍然仅引用“空值”节点。您只需在 next() 方法中将其设置为任何其他值,直到稍后才会调用该方法。

但是,还有一个更严重的设计问题。从根本上来说,集合几乎不应该实现 iterator() 本身。通常,您应该能够多次迭代一个集合 - 可能同时使用多个迭代器,这些迭代器都应该是独立的。迭代集合不应该改变它。

尚不完全清楚您想要实现的目标,但 iterator() 实现几乎总是会创建一个具有某种可变状态的对象,该>引用原始集合,但不改变它。

关于java - 在增强的 for 循环中使用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471373/

相关文章:

java - ListCellRenderer 未在子组件上触发事件

java - 如何配置Gradle缓存自动清除? -如何删除旧的增量jar?

java - 什么是声音控制语言

java - 如何使用 Jackson 来验证重复的属性?

java - 面试题: about Java serialization and singletons

java - 递归使用 Stream.flatMap()

java - 如何在两个对象的java相等性中评估列表

java - libGDX 不会在 android 上运行

java - 暂停和恢复可运行线程

java - CORS和错误以及Access-Control-Allow-Origin header 的问题