递归内部静态类如何初始化?

时间:2016-12-25 13:45:33

标签: java trie static-class

我正在调查Trie数据结构并遇到了这段代码

// R-way trie node
    private static class Node {
        private Object val;
        private Node[] next = new Node[26];
    }

我理解逻辑,但我不知道的是,节点初始化的深度是什么?

您可以在http://algs4.cs.princeton.edu/code/edu/princeton/cs/algs4/TrieST.java.html

查看完整代码

2 个答案:

答案 0 :(得分:5)

这里没有递归。

private Node[] next = new Node[26];

不会创建任何Node实例。它创建了一个由26个元素组成的Node[]Node引用数组)。所有引用都初始化为null。必须在其他地方初始化数组引用的Node实例。

另一方面,如果您将成员初始化为:

private Node n = new Node ();

一旦创建Node的第一个实例,就会导致无限递归。

答案 1 :(得分:0)

在你的代码行中, 首先,您在main方法中使用put(val1,val2)命令插入值。

st.put(key, i);

以下put(val1,val2)方法的代码行,

 public void put(String key, Value val) {
        if (val == null) delete(key);
        else root = put(root, key, val, 0);
    }

根据这些代码行,递归的else部分正在调用另一个put(val1,val2,val3,val4)方法

以下put(val1,val2,val3,val4)方法的代码行,

private Node put(Node x, String key, Value val, int d) {
        if (x == null) x = new Node();
        if (d == key.length()) {
            if (x.val == null) n++;
            x.val = val;
            return x;
        }
        char c = key.charAt(d);
        x.next[c] = put(x.next[c], key, val, d+1);
        return x;
    }

此处,当x==null时,Node对象正在使用new Node();进行初始化。