私はその用語を見たことがある押しつけがましいリストやスタックなどのデータ構造を説明するために使用されますが、これはどういう意味ですか?
侵入型データ構造のコード例と、それが非侵入型データ構造とどう違うのかを教えてください。
また、なぜそれを侵入型(または非侵入型)にするのでしょうか? 利点は何でしょうか? 欠点は何でしょうか?
ベストアンサー1
侵入型データ構造とは、格納しようとする要素を格納するために、それらの要素からの支援を必要とするデータ構造です。
言い換えましょう。何かをそのデータ構造に入れると、その「何か」は、何らかの方法で、それがそのデータ構造内にあるという事実を認識するようになります。データ構造に要素を追加すると、要素が変更されます。
たとえば、各ノードが左と右のサブツリーへの参照と、そのノードの要素値への参照を持つ、非侵入型バイナリ ツリーを構築できます。
または、それらのサブツリーへの参照が値自体に埋め込まれた侵入型を構築することもできます。
侵入的なデータ構造の例としては、変更可能な要素の順序付きリストが挙げられます。要素が変更されると、リストを並べ替える必要があるため、リスト オブジェクトは要素のプライバシーを侵害して協力を得る必要があります。つまり、要素は自分が属するリストを認識し、変更を通知する必要があります。
ORM システムは通常、侵入型データ構造を中心に展開し、オブジェクトの大きなリストに対する反復処理を最小限に抑えます。たとえば、データベース内のすべての従業員のリストを取得し、そのうちの 1 人の名前を変更して、それをデータベースに保存し直す場合、従業員オブジェクトが変更されると、そのオブジェクトは自分がどのリストに含まれているかを認識しているため、侵入型従業員リストに通知されます。
非侵入的なリストは通知されず、何が変更されたか、どのように変更されたかを自ら把握する必要があります。