welcome: please sign in
location: "オブジェクトを除くメソッド"の差分
4と10のリビジョン間の差分 (その間の編集: 6回)
2010-11-22 08:14:24時点のリビジョン4
サイズ: 925
編集者: masahiko
コメント:
2010-11-24 00:58:28時点のリビジョン10
サイズ: 1911
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 1: 行 1:
#acl All:
行 7: 行 6:
その先頭の1つのオブジェクトを除く場合です。 その先頭の(赤いXで示した)1つのオブジェクトを除く場合です。
行 11: 行 10:
 . {{attachment:chain39.png}}
処理はこのように書けます。
 {{{
a = a.next;
 }}}
行 15: 行 18:
赤いXで示したオブジェクトは消えてなくなったのではありません。 赤いXで示したオブジェクトは、すぐに消えてなくなのではありません。
行 18: 行 21:
ごみ集め(ガーベッジコレク)が行われた時点で無くなります。
 . {{attachment:chain39.png}}
ごみ集め(ガーベッジコレクション)が行われた時点で無くなります。
----
===
例2 ===
途中を取り除く場合。
行 21: 行 26:
取り除きたい位置の直前にあるオブジェクトを参照できなければなりません。

変数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として処理を記述すればよい。

オブジェクトを除くメソッド

オブジェクトを除く場合でも、先頭を処理するほうが楽です。


例1

変数aがいくつかつながったオブジェクトを参照しており、 その先頭の(赤いXで示した)1つのオブジェクトを除く場合です。

  • chain38.png

赤矢印でしめしたようにつなぎ変えることで、 並びから1つのオブジェクトを除くことができます。

  • chain39.png

処理はこのように書けます。

  • a = a.next;

処理の後では、 変数aからたどっていくと、赤いXで示したオブジェクトは参照できません。

赤いXで示したオブジェクトは、すぐに消えてなくなるのではありません。

どこからも参照されていないオブジェクトは、 ごみ集め(ガーベッジコレクション)が行われた時点で無くなります。


例2

途中を取り除く場合。

  • chain40.png

取り除きたい位置の直前にあるオブジェクトを参照できなければなりません。

変数pがその位置を指しているとします。

処理はこのように書けます。

  • p.next = p.next.next;


オブジェクトを除くメソッド

例2と同じ処理をするメソッドを作ります。

このような形で呼び出されるものとします。

  •    1 public static void main(String[] args)
       2 {
       3         Chain a;
       4         ...
       5         a.del();
       6         ...
       7 }
    

引数は必要なく、メソッドはこのような形になります。

  •    1 void del( )
       2 {
       3 }
    

mainメソッドから上のように呼び出された場合は

  • aの値がthisに

対応付けられて本体が実行されるので、 例2のpがthisとして処理を記述すればよい。

オブジェクトを除くメソッド (最終更新日時 2010-11-24 00:58:28 更新者 masahiko)