我正在寻找具有以下属性的 Java 队列类型数据结构(最好是在标准库中):
- 我可以向结构中添加一个元素(推送)
- 我可以从结构中删除任意元素而无需指定是哪个元素,就像队列的
remove()
操作一样。显然,如果结构为空,这将失败。 - 如果我向已经存在的结构中添加一个元素,则不会添加两次。
保留插入/删除的顺序并不是特别重要。
Set
结构没有重复,但是没有pop
操作,Queue
结构不保证没有重复。是否存在符合我需求的东西?
为了避免XY问题,我在做一个worklist算法:将需要更新的节点添加到集合中,所以我想轻松弹出下一个需要更新的节点,并添加需要更新的节点而不用如果它们已经在工作列表中,则会得到一堆重复项。
最佳答案
使用LinkedHashSet
,并将pop
实现为
Iterator<E> iterator = set.iterator();
E result = iterator.next();
iterator.remove();
关于具有推送/弹出且没有重复项的 Java 数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42401777/