サイズ: 1886
コメント:
|
サイズ: 1922
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 7: | 行 7: |
その先頭の1つのオブジェクトを除く場合です。 | その先頭の(赤いXで示した)1つのオブジェクトを除く場合です。 |
行 19: | 行 19: |
赤いXで示したオブジェクトは消えてなくなったのではありません。 | 赤いXで示したオブジェクトは、すぐに消えてなくなるのではありません。 |
行 22: | 行 22: |
ごみ集め(ガーベッジコレクタ)が行われた時点で無くなります。 | ごみ集め(ガーベッジコレクション)が行われた時点で無くなります。 |
オブジェクトを除くメソッド
オブジェクトを除く場合でも、先頭を処理するほうが楽です。
例1
変数aがいくつかつながったオブジェクトを参照しており、 その先頭の(赤いXで示した)1つのオブジェクトを除く場合です。
赤矢印でしめしたようにつなぎ変えることで、 並びから1つのオブジェクトを除くことができます。
処理はこのように書けます。
a = a.next;
処理の後では、 変数aからたどっていくと、赤いXで示したオブジェクトは参照できません。
赤いXで示したオブジェクトは、すぐに消えてなくなるのではありません。
どこからも参照されていないオブジェクトは、 ごみ集め(ガーベッジコレクション)が行われた時点で無くなります。
例2
途中を取り除く場合。
取り除きたい位置の直前にあるオブジェクトを参照できなければなりません。
変数pがその位置を指しているとします。
処理はこのように書けます。
p.next = p.next.next;
オブジェクトを除くメソッド
例2と同じ処理をするメソッドを作ります。
このような形で呼び出されるものとします。
引数は必要なく、メソッドはこのような形になります。
- 行番号表示/非表示切替
1 void del( ) 2 { 3 }
mainメソッドから上のように呼び出された場合は
- aの値がthisに
対応付けられて本体が実行されるので、 例2のpがthisとして処理を記述すればよい。