【Unity連載】ArrayListとListの違いを知ろう!



はじめに

今回は、前回までお話をしてきた「List」と、最近巷でよく聞く「ArrayList」の違いについてご説明します。


ArrayListとListの共通点

違いについて説明する前にまずは共通点についてご説明します。これら2つは名前が似ているだけじゃないんです。その共通点は大きく分けて3つあります。
・複数のデータを一つのリストに入れることができる。
・リストに入るデータの数は後から変更することができる。
・リストの定義の仕方やメソッドの使い方(要するに書き方)。
1つ目と2つ目は配列とリストを区別する上でのリストの特徴でしたね。3つ目は実際に↓に書いたものを見比べてみましょう。

//ArrayList「arrayList」の定義
ArrayList arrayList = new ArrayList();
//定義したリストに「70」を加える
arrayList.Add(70);

//List「list」の定義
List<int> list = new List<int>();
//定義したリストに「70」を加える
list.Add(70);

いかがでしょうか?定義の仕方もさることながら、特に「Addメソッド」の使い方なんてまんま同じですよね(笑)
しかし、よーく注意をして見てみると定義の仕方が若干違う部分があります。そこがArrayListとListの大きな違いとなります。次は、この違いについて説明していきます。


ArrayListとListの違い

それではいよいよ今回のタイトルにもあるArrayListとListの違いについてお話していきます。上の項の最後にも書いた様に、リストの定義の仕方が若干異なります。ArrayListには<>内のデータ型の定義が無いのに対して、Listには<>の中にデータ型の定義(今回は「int」)が記載されています。この違いは、表記にすると「若干」の違いですが、扱いやすさが大きく変わります。
ArrayListはデータ型の定義が必要ないということはつまり、リストの中にどんな型のデータでも好き放題詰め込めるということになります。具体的には↓の例の様な形です。

ArrayList arrayList = new ArrayList(){1,”apple”,true};

↑の例では1つのリストの中にint型、String型、bool型のデータが一緒に入っています
しかし、それに対してList型の中には↓の例の様に1つの型のデータしか入れることができません。

//int型のみ入れているのでOK
List<int> list = new List<int>(){ 10,20,30 };
//int型以外の型も入れているのでERROR
List<int> list = new List<int>(){ 10,”twenty”,false };

ここまでの話を聞いていると、型を曖昧にすることができるArrayListの方が使いやすそうに見えるかもしれませんが、実際はデータを取り出しにくく、使いにくいです。↓の例では、ArrayListとListでそれぞれデータを取り出す作業を比較したものです。「キャスト」という動きが入っているのでわかりにくいかと思いますが、ArrayListの面臭さが伝われば幸いです(笑)

//ArrayListの定義
ArrayList arrayList = new ArrayList(){ 10,20,30 };
//型が定まっていないのでこのままではERROR
int num = arrayList[ 0 ];
//キャストをしたのでOK
int num1 = ( int )arrayList[ 0 ];

//Listの定義
List<int> list = new List<int>(){ 10,20,30 };
//Listの場合はこのままでOK
int num2 = list[ 0 ];

おわりに

非常によく似たArrayListとListの違いは理解できましたか?ぜひ、これらの違いを理解した上で上手く使い分けてみてください!

 

  • このエントリーをはてなブックマークに追加

PAGE TOP