0
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のサイズから取得したコレクションが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);
    }
4

3 に答える 3

1

--を使用しないでください-インターフェースArrayListの実装の1つを使用してください。Dequeたとえば、LinkedBlockingDequeこの種のもののために設計されたを使用します。必要に応じてaddFirst()、、、、およびメソッドを使用します。addLast()pollFirst()pollLast()

何らかの理由で本当にを使用する必要がある場合はList、すべての要素を移動する必要がLinkedListあるため、の前に-を追加するのArrayListは非常に非効率的です。

于 2011-10-30T04:53:40.183 に答える
1

ArrayListの javadoc を読むことができます

public void add(int インデックス, E 要素)

このリストの指定された位置に、指定された要素を挿入します。現在その位置にある要素 (存在する場合) と後続の要素を右にシフトします (インデックスに 1 を追加します)。

queue.add(0,myObject);

JavaDocs はあなたの友達です。

そうは言っても、他の人が述べたように; 使用するのに最適なデータ構造ではありません。リストへのランダム アクセスが必要ない場合は、LinkedList または ArrayDeque の方が効率的です。

于 2011-10-30T05:04:04.140 に答える
0

スタックを使用してみませんか。スタックは、DFS への道です。この記事を参照して、スタックが問題を解決する理由を確認してください。この便利なチュートリアルも参照してください:)

于 2011-10-30T05:07:29.573 に答える