Class Diagnostic {
//Get the size in bytes of an object
static long sizeOf(Object object);
//Get the references for an object (leafs)
static List<Object> getRefs(Object object);
//Implement this with those above
public Long objectSize(Object object);
}
您将如何实现 objectSize 以返回对象的大小(以字节为单位)?
方法 objectSize 返回组合的所有子节点(树上的每个节点)的大小(以字节为单位)。
例子:
Object A (19 bytes)
/ \
/ \
B(20) C(37)
/
/
C(15)
答案:19+20+37+15 = 91
我在面试时遇到了这个问题,我很想看到其他人的答案。因为,我对树遍历算法了解不多。
我想出了这个......(我知道这很糟糕;),只是想学习)
public Long objectSize(Object object) {
List<Object> objectList = new ArrayList<Object>();
Long sum = sizeOf(object);
objectList = getRefs(object);
for(Object object : objectList){
sum += objectSize(object);
}
return sum;
}
我注意到我可能有一个循环并运行一个 stackoverflow 错误,因为我没有检查我是否已经通过了一个“节点”。然后我很难我应该有另一个数据结构(如用于处理键/值的哈希图)来处理临时列表以进行比较。