递归内部静态 class 如何初始化?
How recursive inner static class get initialized?
我正在研究 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
查看完整代码
这里没有递归。
private Node[] next = new Node[26];
不创建任何 Node
实例。它创建了一个包含 26 个元素的 Node[]
(Node
引用的数组)。所有引用都初始化为空。数组引用的 Node
个实例必须在别处初始化。
另一方面,如果您有一个成员初始化为:
private Node n = new Node ();
一旦 Node
的第一个实例被创建,这将导致无限递归。
在你的代码行中,
首先,您在 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();
进行初始化。
我正在研究 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
查看完整代码这里没有递归。
private Node[] next = new Node[26];
不创建任何 Node
实例。它创建了一个包含 26 个元素的 Node[]
(Node
引用的数组)。所有引用都初始化为空。数组引用的 Node
个实例必须在别处初始化。
另一方面,如果您有一个成员初始化为:
private Node n = new Node ();
一旦 Node
的第一个实例被创建,这将导致无限递归。
在你的代码行中,
首先,您在 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();
进行初始化。