<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>オブジェクトを除くメソッド</title><revhistory><revision><revnumber>10</revnumber><date>2010-11-24 00:58:28</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2010-11-23 11:57:24</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2010-11-22 08:23:05</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2010-11-22 08:20:54</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2010-11-22 08:16:15</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2010-11-22 08:15:25</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-11-22 08:14:24</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-11-22 08:07:13</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-11-22 08:05:58</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2010-11-22 08:05:08</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>オブジェクトを除くメソッド</title><para>オブジェクトを除く場合でも、先頭を処理するほうが楽です。 </para><!--rule (<hr>) is not applicable to DocBook--><section><title>例１</title><para>変数aがいくつかつながったオブジェクトを参照しており、 その先頭の(赤いXで示した)１つのオブジェクトを除く場合です。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E9%99%A4%E3%81%8F%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain38.png"/></imageobject><textobject><phrase>chain38.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>赤矢印でしめしたようにつなぎ変えることで、 並びから１つのオブジェクトを除くことができます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E9%99%A4%E3%81%8F%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain39.png"/></imageobject><textobject><phrase>chain39.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>処理はこのように書けます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[a = a.next;]]></screen></listitem></itemizedlist><para>処理の後では、 変数aからたどっていくと、赤いXで示したオブジェクトは参照できません。 </para><para>赤いXで示したオブジェクトは、すぐに消えてなくなるのではありません。 </para><para>どこからも参照されていないオブジェクトは、 ごみ集め(ガーベッジコレクション)が行われた時点で無くなります。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>例２</title><para>途中を取り除く場合。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E9%99%A4%E3%81%8F%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=chain40.png"/></imageobject><textobject><phrase>chain40.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>取り除きたい位置の直前にあるオブジェクトを参照できなければなりません。  </para><para>変数pがその位置を指しているとします。 </para><para>処理はこのように書けます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[p.next = p.next.next;]]></screen></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>オブジェクトを除くメソッド</title><para>例２と同じ処理をするメソッドを作ります。 </para><para>このような形で呼び出されるものとします。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[static]]></token><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[main]]></methodname><![CDATA[(]]><methodname><![CDATA[String]]></methodname><![CDATA[[] ]]><methodname><![CDATA[args]]></methodname><![CDATA[)]]>
<![CDATA[{]]>
<![CDATA[        ]]><methodname><![CDATA[Chain]]></methodname><![CDATA[ ]]><methodname><![CDATA[a]]></methodname><![CDATA[;]]>
<![CDATA[        ...]]>
<![CDATA[        ]]><methodname><![CDATA[a]]></methodname><![CDATA[.]]><methodname><![CDATA[del]]></methodname><![CDATA[();]]>
<![CDATA[        ...]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><para>引数は必要なく、メソッドはこのような形になります。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[del]]></methodname><![CDATA[( )]]>
<![CDATA[{]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><para>mainメソッドから上のように呼び出された場合は </para><itemizedlist><listitem><para>aの値がthisに </para></listitem></itemizedlist><para>対応付けられて本体が実行されるので、 例２のpがthisとして処理を記述すればよい。 </para></section></section></article>