【问题标题】:How to implement a random iterator?如何实现随机迭代器?
【发布时间】:2018-02-17 12:08:44
【问题描述】:

我应该实现一个迭代器,它以随机顺序返回一个迭代器。这是我现在尝试做的:

    private class RandomQueueIterator<E> implements Iterator<E> {
    int i = -1;

    public boolean hasNext() {
        return i+1 < size;
    }
    public E next() {
        if (!hasNext()) {
            throw new java.util.NoSuchElementException();
        }
        i++;
        return (E) queue[i];
    }
    public void remove() {
        throw new java.lang.UnsupportedOperationException();
    }

}

public Iterator<Item> iterator() { // return an iterator over the items in random order
    return new RandomQueueIterator();
}

我有一个想法,我应该(?)使用 StdRandon.uniform();但不知道在哪里确切地写它。因此,我希望你们中的一个可以帮助我!

【问题讨论】:

  • take the tour 了解该网站的运作方式以及此处的主题有哪些问题,并edit 相应地提出您的问题。另见:Why is "Can someone help me?" not an actual question?
  • 欢迎来到 Stack Overflow!请使用tour 并通读help center,尤其是How do I ask a good question? 您的“暂时尝试”只是一个迭代器,根本没有尝试处理使其随机化。所以...做你的研究,search 以获取有关 SO 的相关主题,并试一试,尝试去做。 如果您在进行更多研究和搜索后遇到困难并且无法摆脱困境,请发布您的尝试minimal reproducible example,并具体说明您遇到的问题。人们会很乐意提供帮助。祝你好运!
  • 谢谢你们的回答!我不确定您希望我如何提出我的问题。如果您要另一半的代码,我很乐意将其发送给您,即使我发现它与本主题无关。你们能否更具体地说明您希望我详细说明的内容或其他内容?提前致谢!

标签: java random-access


【解决方案1】:

我认为最简单的方法是复制您要迭代的列表,然后随机播放:

List<E> shuffled = new ArrayList<>(list);
Collections.shuffle(shuffled);

那就用shuffled.iterator()吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 2017-10-15
    • 2016-01-23
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2019-12-06
    • 2014-06-06
    相关资源
    最近更新 更多