如何实现随机迭代器?
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()
吧。
【讨论】:
以上是关于如何实现随机迭代器?的主要内容,如果未能解决你的问题,请参考以下文章