public void traverse(Node root){
ArrayDeque<Node> queue = new ArrayDeque<Node>();
queue.add(root);
while(!queue.isEmpty()){
Node currentNode = queue.pollFirst();
List<Node> nl = getChildrenfromDB(currentNode);
queue.addAll(nl);
}
我应该使用ArrayDeque
或LinkedList
还是LinkedBlockingDeque
?当我设置int值为10时会发生什么?这是否意味着队列一次只能容纳10个?如果从DB的大小中检索的Collection大于10,该怎么办?此绑定值是否定义队列的“快照”?
public void traverse(Node root){
LinkedBlockingDeque<Node> queue = new LinkedBlockingDeque<Node>(10);
queue.add(root);
while(!queue.isEmpty()){
Node currentNode = queue.pollFirst();
List<Node> nl = getChildrenfromDB(currentNode);
queue.addAll(nl);
}
答案 0 :(得分:1)
不要使用ArrayList
- 使用Deque
接口的其中一个实现。例如,使用专为此类事物设计的LinkedBlockingDeque
。根据需要使用addFirst()
,addLast()
,pollFirst()
和pollLast()
方法。
如果出于某种原因,您确实需要使用List
,请使用LinkedList
- 添加到ArrayList
的前面是非常低效的,因为所有元素都需要感动。
答案 1 :(得分:1)
您可以阅读ArrayList
的javadocpublic void add(int index,E element)
将指定元素插入此列表中的指定位置。将当前位置的元素(如果有)和右侧的任何后续元素移位(将其添加到索引中)。
queue.add(0,myObject);
JavaDocs是您的朋友。
正如其他人所说的那样;不是最好的数据结构。如果您不需要随机访问列表,则LinkedList或ArrayDeque更有效。
答案 2 :(得分:0)