【问题标题】:Java data structure with push/pop and no duplicates?具有推送/弹出且没有重复项的 Java 数据结构?
【发布时间】:2017-07-13 02:37:51
【问题描述】:

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

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

保持插入/删除的顺序并不是很重要。

Set 结构没有重复,但没有pop 操作,Queue 结构不保证没有重复。有适合我需要的东西吗?

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

【问题讨论】:

标签: java data-structures set queue


【解决方案1】:

使用LinkedHashSet,并将pop 实现为

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

【讨论】:

  • 也许你的意思是iterator.next();iterator.remove();
  • 很好,已修复。
【解决方案2】:

您可以使用集合的迭代器来删除单个元素。排序将取决于集合实现。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 2016-06-29
    • 2011-06-30
    • 2019-03-17
    相关资源
    最近更新 更多