【Java】Progateで取り上げられていないJavaの基本まとめ~その2~


リスト(ArrayList)

Progateでは配列については取り上げられているが、リストについては触れられていない。

配列とリストは似ているが何が違うのか?


配列の特徴

・最初から要素数が固定されており、メモリを確保する

・用意した要素数が連続した領域にメモリとして確保される

・インデックスを利用してメモリアドレスを直接指定できるため、アクセスが速い

・途中で要素の挿入や追加といったことは、元にあった要素をずらす必要があり大変


リストの特徴

ーリストは配列によく似ており、値の集合を扱うために利用する。

 ただし、リストは要素が追加された順番を保持し、重複した要素もそのまま保持することが可能。

・要素数を可変できる

・前後にポインタが付与されポインタで接続されながら空いているメモリ領域に要素が格納されていく

・要素にアクセスするには先頭からポインタをたどる必要があり時間を要する

・途中で要素の挿入、追加といったことは、ポインタの接続を変えるだけなので速い


リストの書き方

ArrayList<> リスト名 = new ArrayList<>();

例えば、

ArrayList<String> strList = new ArrayList<String>();

とするとstrListにStringの要素を格納できる。

リストの要素は参照型である必要があるため、Stringを要素に持つことはできても

intのような基本データ型を要素に持つリストは作成できない。


リストの例①


リストの追加

public static void main(String[] args) {

// Stringの要素を格納するためのリストを用意
List<String> strList1 = new ArrayList<String>();

strList1.add("広島");
strList1.add("東京");
strList1.add("横浜");

// 追加した順にリストに入る
System.out.println(strList1);
}


実行結果

["広島", "東京", "横浜"]


リストの例②


要素の更新

public static void main(String[] args) {

// Stringの要素を格納するためのリストを用意
List<String> strList2 = new ArrayList<String>(3);

strList2.add("近鉄");
strList2.add("オリックス");
strList2.add("西武");

// 追加した順にリストに入る
System.out.println("更新前" + strList2);

// 1番目の要素を"楽天"に上書きする
strList2.set(1, "楽天");

// 上書き後のリスト("近鉄"→"楽天"になっている)
System.out.println("更新後" + strList2);
}


実行結果

更新前[近鉄、オリックス、西武]

更新後[楽天、オリックス、西武]


リストの例③


リストの値の取得

リストから値を取得するには.getメソッドを使う。

public static void main(String[] args) {

// Stringの要素を格納するためのリストを用意
List<String> strList3 = new ArrayList<String>(3);

strList3.add("中日");
strList3.add("阪神");
strList3.add("読売");

// リストから2番目の値を取得して表示
System.out.println(strList3.get(2));
}


実行結果

阪神

こんな感じ。


余談

初心者向けの辞書的ポジの参考書として個人的に位置付けた、

こちらの本にはリストについては一切記載がありませんでした。

https://www.amazon.co.jp/%E6%96%B0%E3%83%BB%E6%98%8E%E8%A7%A3Java%E5%85%A5%E9%96%80-%E6%9F%B4%E7%94%B0-%E6%9C%9B%E6%B4%8B-ebook/dp/B01HYSUY92

Progateにもあえて収録しておらず、こうした初心者向け書籍も触れていないくらいなので

実務的には使える必要があることを知っていつつも学習初段階で無理して知らなくても良い知識かもしれない。

私自身初学者で、自身の学習メモとして記事を書いていますので、

間違っているところがたくさんあると思われますので、お気付きの点があればガンガン指摘してください。

よろしくお願いします。