gpt4 book ai didi

Java : Implementing iterator for user-created HashSet class. next() 和 hasNext() 的语义?

转载 作者:行者123 更新时间:2023-11-29 03:48:25 25 4
gpt4 key购买 nike

采用 java 类,我们必须设计自己的 HashSet 类。 (不使用 JAVA api)

我必须为此实现和迭代器,我对使用它的语义感到困惑。

不确定是否应该允许调用 Next() 来移动迭代器的索引,或者用户是否必须绝对将 next() 与 hasNext() 循环结合使用以移动索引.

例如,如果用户在没有 hasNext() 的情况下连续多次调用 next() 会发生什么情况?

感谢大家的帮助!

public class HashWordSet implements WordSet {

private int size;
private Node[] buckets = new Node[8];
//above is only provided for mention of variables

private class Node {
Word value;
Node next = null;

public Node(Word word) {value = word;}
public String toString() {return value.toString();}
}

class WordIterator implements Iterator<Word> {

private Node next;
private int index = 0;

public Word next() {
Node element = next;
if (element == null)
throw new NoSuchElementException();
if ((next = element.next) == null) {
Node[] temp = buckets;
while (index < temp.length && (next = temp[index++]) == null)
;
}
return element.value;
}

public boolean hasNext() {
return (next != null);
}

最佳答案

Javadoc 指定如果调用 next 并且没有下一个元素,则必须抛出 NoSuchElementException。也就是说,您不应该假设 hasNext 总是在 next 之前被调用——或者 hasNext 只被调用一次!

对哈希表执行此操作的典型方法是

  1. hasNext 遍历哈希表如果它还没有指向有效元素。
  2. next 调用 hasNext 作为它的第一步,在返回下一个元素后,递增到哈希表中的下一个位置(不检查是否有是该位置的元素)。

关于Java : Implementing iterator for user-created HashSet class. next() 和 hasNext() 的语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9842214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com