这是一个有效的Java代码,用于实现特里数据结构。
class TrieNode {
TrieNode[] arr;
boolean isEnd;
// Initialize your data structure here.
public TrieNode() {
this.arr = new TrieNode[26];
}
我不明白的是内存分配是如何工作的
TrieNode[] arr;
代码。如果是这样的话
class TrieNode {
int[] arr;
boolean isEnd;
// Initialize your data structure here.
public TrieNode() {
this.arr = new int[26];
}
我知道这会为26个整数分配内存。 最好能解释一下第一个代码的内存分配方式。 (从编译器的角度来看)
编辑:很抱歉,如果我的问题不清楚。我问的是我们在
中创建了包含26个元素的数组new TrieNode[26];
分配了多少内存?
答案 0 :(得分:0)
直到您不拨打电话new
为止,都不会完成内存分配。
因此TrieNode[] arr;
可作为将来的参考。
只有在调用构造函数时,Java才会分配内存并在arr
内设置引用。
链接:
答案 1 :(得分:0)
使用您的第一个代码,当您创建TriNode之类的对象时
TriNode t = new TriNode();
JVM将分配内存以存储26个对arr元素的引用和1个对isEnd字段的引用。为了存储引用,JVM将32位用于32位JVM,将64位用于64位JVM。 创建数组
new TrieNode[26];
它将分配26 *(64bit / 32bit)+1布尔值,因为它不会创建TrieNode对象,而是会创建引用数组来存储尚未创建的TriNode对象。因此,当您初始化数组元素
arr[0] = new TrieNode();
然后它将为TrieNode()对象分配内存,而arr [0]将指向该对象。
所以结论是JVM不会为26个Trinode对象分配内存 相反,它将为他们的引用分配内存。