0

たとえば、BST にノードを追加する以下の関数では、暗黙的な参照のみを使用しています。関数の開始時に変数 TreenNode node = .. を明示的に宣言し、適切な場所で使用することもできました。今、それが意見に基づいているかどうかはわかりません。OPTION2 よりも OPTION1 を使用することの長所または短所はありますか?

オプション1:

 public void add(int item) {
        if (root == null) {
            root = new TreeNode(null, item, null);
            return;
        }

        TreeNode node = root;
        while (true) {
            if (item < node.item) {
                if (node.left == null) {
                    node.left = new TreeNode(null, item, null);
                    break;
                }
                node = node.left;
            } else {
                if (node.right == null) {
                    node.right = new TreeNode(null, item, null);
                    break;
                }
                node = node.right;
            }
        }
    }

オプション 2:

public void add(int item) {

            TreeNode nodeNew = new TreeNode(null, item, null); // explicit

            if (root == null) {
                root = nodeNew;
                return;
            }

            TreeNode node = root;
            while (true) {
                if (item < node.item) {
                    if (node.left == null) {
                        node.left = nodeNew;
                        break;
                    }
                    node = node.left;
                } else {
                    if (node.right == null) {
                        node.right = nodeNew;
                        break;
                    }
                    node = node.right;
                }
            }
        }
4

2 に答える 2

1

オプション 1 は、手順が少ないため、より最適化されています。オプション 2 は、参照を保持する変数を作成して、代入のみに使用することを意味します。一部の人にとっては見栄えが良いだけです。オプション 1 では、一時的な参照をスキップして、割り当てとオブジェクトの作成を直接行います。

しかし、結局のところ、別の違いはありません。


また、オプション 2 では、nodeNew の宣言を return の下に移動することをお勧めします。

使用しないのに初期化する必要はありません。

            if (root == null) {
                root = node;
                return;
            }

TreeNode nodeNew = new TreeNode(null, item, null); // explicit
于 2013-09-29T21:38:50.230 に答える