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;
}
すでに「ノード」を通過したかどうかを確認していなかったため、サイクルが発生してスタックオーバーフロー エラーが発生する可能性があることに気付きました。次に、比較用の一時リストを処理するために、別のデータ構造 (キー/値を処理するためのハッシュマップなど) を用意する必要があります。