我正在寻找一个可以并发访问的 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/