【发布时间】:2014-06-19 15:24:46
【问题描述】:
通常我将 Deque 用于其预期目的,但很少需要从中选择一个随机元素。我使用下面的代码来执行此操作,但它需要遍历 Deque。有没有更有效的方法?
Iterator<T> iterator = mDeque.iterator();
int target = mRand.nextInt(mDeque.size());
while (iterator.hasNext()) {
if (target == 0) {
chosenElement = iterator.next();
break;
} else {
iterator.next();
target--;
}
}
【问题讨论】:
-
您当前的方法是 O(n),我认为没有比这更有效的方法了。 “与 List 接口不同,此接口不支持对元素的索引访问。”
-
我想您可以创建自己的 Deque 实现,将 ArrayList 包装为其后备存储,并添加一个委托给列表的 get 方法的 get 方法。
标签: java random performance deque