Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java:使用ArrayDeque、LinkedList或LinkedBlockingDeque的非递归深度优先搜索?_Java_Depth First Search_Non Recursive - Fatal编程技术网

java:使用ArrayDeque、LinkedList或LinkedBlockingDeque的非递归深度优先搜索?

java:使用ArrayDeque、LinkedList或LinkedBlockingDeque的非递归深度优先搜索?,java,depth-first-search,non-recursive,Java,Depth First Search,Non Recursive,不要使用ArrayList——使用Deque接口的实现之一。例如,使用一个LinkedBlockingDeque,它是为这类事情而设计的。根据需要使用addFirst()、addLast()、pollFirst()和pollLast()方法 如果出于某种原因,您确实需要使用列表,请使用链接列表——添加到数组列表的前面是非常低效的,因为所有元素都需要移动。您可以阅读javadocs了解更多信息 公共void add(int索引,E元素) 在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如

不要使用
ArrayList
——使用
Deque
接口的实现之一。例如,使用一个
LinkedBlockingDeque
,它是为这类事情而设计的。根据需要使用
addFirst()
addLast()
pollFirst()
pollLast()
方法


如果出于某种原因,您确实需要使用
列表
,请使用
链接列表
——添加到
数组列表
的前面是非常低效的,因为所有元素都需要移动。

您可以阅读javadocs了解更多信息

公共void add(int索引,E元素)

在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将一个元素添加到其索引中)

JavaDocs是你的朋友


尽管如此,正如其他人所提到的;不是要使用的最佳数据结构。如果不需要随机访问列表,则LinkedList或ArrayQue更有效。

为什么不使用堆栈。堆栈是DFS的发展方向。请参阅文章,了解为什么Stack可以解决这个问题。请参见以下有用内容:)

编写前置代码。对于一个队列,这应该不是很难。关于
List.addAll(int-index,CollectionI)呢?我用过它,但它占用了很多内存。
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);
    }
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);
    }
queue.add(0,myObject);