xobotosで評判の高いパフォーマンスの向上に興味があったので、バイナリツリーベンチマークコードを確認しました。
バイナリツリーノードのJavaバージョンは次のとおりです。
private static class TreeNode
{
private TreeNode left, right;
private int item;
}
C#バージョンは次のとおりです。
struct TreeNode
{
class Next
{
public TreeNode left, right;
}
private Next next;
private int item;
}
NextポインタとPreviousポインタはまだクラスにカプセル化されているので、ここで構造体を使用する利点は何でしょうか。
1つあります。リーフノードは、左右のポインタを必要としないため、純粋な値型です。ノードの半分が葉である典型的な二分木では、それはオブジェクトの数が50%減少することを意味します。それでも、リストされているパフォーマンスの向上ははるかに大きいようです。
質問:これにはもっとありますか?
また、C#でこのようにツリーノードを定義することを考えていなかったので(Xamarinに感謝します!)、他のどのデータ構造が非自明な方法で構造体を使用することで利益を得ることができますか?(それは少し話題から外れていて、オープンエンドですが。)