java - 并发,随机化/改组队列?

标签 java data-structures

我正在寻找一个可以并发访问的 java.util.Queue 实现,其中的元素是随机添加和/或删除的.也就是说,我正在寻找一种遵循 FIFO 约束但确保在当前包含的条目中混洗新条目的实现。

请注意according to the java.util.Queue contract ,“通常但不一定以 FIFO(先进先出)方式对元素进行排序。”

最佳答案

我认为你可以基于 java.util.concurrent.PriorityBlockingQueue 实现你自己的版本,像这样

class ConcurrenRandomizingQueue<E> extends AbstractQueue<E> {
    static Random r = new Random();
    Queue<Entry> q = new PriorityBlockingQueue<Entry>();

    static class Entry implements Comparable<Entry> {
        Object e;
        int p;

        Entry(Object e) {
            this.e = e;
            this.p = r.nextInt();
        }

        public int compareTo(Entry e) {
            return Integer.compare(p, e.p);
        }
    }

    public boolean offer(E e) {
        return q.offer(new Entry(e));
    }

    public E poll() {
        Entry e = q.poll();
        if (e == null)
            return null;
        return (E) e.e;
    }

    public E peek() {
    Entry e = q.peek();
    if (e == null)
        return null;
    return (E) e.e;
    }

    public int size() {
        return q.size();
    }

    public Iterator<E> iterator() {
        return null; // TODO
    }
}

关于java - 并发,随机化/改组队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14904936/

相关文章:

java - 在 Java 中使用 HashMap 创建真实的映射

c# - 持久化队列以防止 C# 中的内存不足错误

java - 为什么将队列实现为循环数组?

java - 理解java中实现Runnable的线程

Java Flight Recorder 未报告所有 GC 事件

java - 使用长变量作为其大小创建长数组时的错误感到困惑

java - 使用传入的方法实例化 Java 对象

java - 算法实验运行时间与理论运行时间函数的比较

algorithm - 在重叠区间中查找基本区间

data-structures - Windows 的二元决策图库