== オブジェクトを除くメソッド == オブジェクトを除く場合でも、先頭を処理するほうが楽です。 ---- === 例1 === 変数aがいくつかつながったオブジェクトを参照しており、 その先頭の(赤いXで示した)1つのオブジェクトを除く場合です。 . {{attachment:chain38.png}} 赤矢印でしめしたようにつなぎ変えることで、 並びから1つのオブジェクトを除くことができます。 . {{attachment:chain39.png}} 処理はこのように書けます。 {{{ a = a.next; }}} 処理の後では、 変数aからたどっていくと、赤いXで示したオブジェクトは参照できません。 赤いXで示したオブジェクトは、すぐに消えてなくなるのではありません。 どこからも参照されていないオブジェクトは、 ごみ集め(ガーベッジコレクション)が行われた時点で無くなります。 ---- === 例2 === 途中を取り除く場合。 . {{attachment:chain40.png}} 取り除きたい位置の直前にあるオブジェクトを参照できなければなりません。 変数pがその位置を指しているとします。 処理はこのように書けます。 {{{ p.next = p.next.next; }}} ---- === オブジェクトを除くメソッド === 例2と同じ処理をするメソッドを作ります。 このような形で呼び出されるものとします。 {{{#!java public static void main(String[] args) { Chain a; ... a.del(); ... } }}} 引数は必要なく、メソッドはこのような形になります。 {{{#!java void del( ) { } }}} mainメソッドから上のように呼び出された場合は * aの値がthisに 対応付けられて本体が実行されるので、 例2のpがthisとして処理を記述すればよい。