プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Java、ListとArrayListの違い。
Javaでリストを使いたい時って
よくこーゆー書き方しますよね?φ(--)

List hogeList = new ArrayList();

なんで

ArrayList hogeList = new ArrayList();

って書かないのか?
実はこれ、簡単だけど奥が深いみたいです。

・・・の前に、ListとArrayListの違いは

ListはインターフェイスでArrayListは実装クラス

ってことです。
だからどーした?って話ですよね。
確かにその通りなんだけどそんなのが分かっても役には立たない。
もちっと細かく見てみましょう(--)b

「ArrayList」の宣言はこんな感じになっていますφ(--)

public class ArrayList<E>
      extends AbstractList<E>
      implements List<E>, RandomAccess, Cloneable, Serializable


そーです。
Listインターフェイスをimplementsしているのです。
つまり

List hogeList = new ArrayList();

ってのはhogeListをListインターフェイスで宣言して
そこにListインターフェイスをimplementsしたクラスのインスタンスを突っ込んでいるのです。

えっ?まだ「だからどーした?」ですか?
つまりですね、この変数「hogeList」には「Listインターフェイスをimplementsしたクラスのインスタンスならなんでも」突っ込める訳ですよ。
別に「ArrayList」じゃなくても突っ込めるのです。

ArrayList hogeList = new ArrayList();

って宣言しちゃうと「ArrayList」しか入れられません。
イメージで言うと「カレー食べるぞ!」って言ってる分には
カツカレーでもシーフードカレーでも食べられますが
「カツカレー食べるぞ!」と言っちゃうとシーフードカレーは食べられないのですよ。
だから

List hogeList = new ArrayList();

って書き方をするのは今後の拡張性や多様性を考えて・・最初の人が書いたのを
次以降の人がなんにも考えずにパクったからだと思います。

じゃあさ、「ArrayList」使いたい時は常に「List」で宣言、
もう決まり文句!って覚えちゃえばいーのでしょうか?
答えは「駄目」です。私の中では。
なんでもかんでも上位の型で宣言しておけばいーのなら

Object hogeList = new ArrayList();

って宣言しちゃうのが一番楽じゃないですか。
でもこの書き方すると上司とか先輩に説教されますよ。

List hogeList = new ArrayList();

って書いて良いのは「List」の機能を使いたい時。
Listはインターフェイスだから

List hogeList = new List();

って書けないですしね。
例えばhogeListに対して「ArrayList」にあって「List」にないメソッドを使う場合は

ArrayList hogeList = new ArrayList();

って宣言しなくちゃ駄目です。

List hogeList = new ArrayList();

って宣言している場合「hogeList」のインスタンスは
「ArrayList」とは限りません。

List hogeList = new ArrayList();
hogeList = new TreeList();


とかもありなので「ArrayList」固有のメソッドを参照した時点で
いやーなことになります(;´A`)

えー、じゃあどっち使えばいーんだよ!?と悩みますよね。
これはもう好き好きだと思うのですが、
私は「ArrayList」固有のメソッドを呼ぶって分かってる場合は

ArrayList hogeList = new ArrayList();

で宣言して、それ以外は全部

List hogeList = new ArrayList();

にするようにしています。
分かんないときはゆるくしとくのが生活の知恵です。
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● Java  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事