我已经编写了一个实现 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/