如何实现随机迭代器?

Posted

技术标签:

【中文标题】如何实现随机迭代器?【英文标题】: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,并具体说明您遇到的问题。人们会很乐意提供帮助。祝你好运! 谢谢你们的回答!我不确定您希望我如何提出我的问题。如果您要另一半的代码,我很乐意将其发送给您,即使我发现它与本主题无关。你们能否更具体地说明您希望我详细说明的内容或其他内容?提前致谢! 【参考方案1】:

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

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

那就用shuffled.iterator()吧。

【讨论】:

以上是关于如何实现随机迭代器?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保函数模板的参数是随机访问迭代器?

如何实现跳转迭代器

问题8~9:如何实现可迭代对象和迭代器对象

python学习--如何实现可迭代对象(itearable)和迭代器(iterator)

如何检查传递的Iterator是一个随机访问迭代器?

如何将元素定义为与随机访问迭代器指向的元素相同的类型?