带推/弹的Java数据结构,没有重复?

时间:2017-02-22 20:37:38

标签: java data-structures set queue

我正在寻找Java中的队列类型数据结构(最好是在标准库中),它具有以下属性:

  • 我可以在结构中添加元素(推送)
  • 我可以从结构中删除任意元素,而不指定哪个元素,就像队列的Set操作一样。如果结构为空,显然会失败。
  • 如果我将一个元素添加到已经存在的结构中,则不会添加两次。

保留插入/删除的顺序并不是非常重要。

pop结构没有重复,但没有Queue操作,{{1}}结构不保证没有重复。是否符合我的需求?

为了避免XY问题,我正在做一个工作列表算法:需要更新的节点被添加到集合中,所以我想轻松弹出需要更新的下一个节点,并添加需要更新的节点如果他们已经在工作清单中,那就得到一堆重复。

2 个答案:

答案 0 :(得分:5)

使用LinkedHashSet,并将pop实施为

Iterator<E> iterator = set.iterator();
E result = iterator.next();
iterator.remove();

答案 1 :(得分:2)

您可以使用set的迭代器删除单个元素。排序取决于设定的实施。

static <T> T remove(Set<T> set) {
    Iterator<T> iter = set.iterator();
    T element = iter.next();
    iter.remove();
    return element;
}