個人的な勉強のためまとめました
ArrayList
何らかの集合のことをコレクションと呼び、配列もそのうちの一つである
Javaには、もっと簡単にコレクションを扱うために、コレクションAPIやコレクション・フレームと呼ばれる複数のインターフェイスや、クラスで構成されるクラス群がある
これらのインターフェイスやクラスの多くはjava.utilパッケージに配置されており、java.util.ArrayListクラスは動的配列とも呼ばれ、配列のように使える
ArrayListクラスの特徴
①オブジェクトであればどのような型でも使える
②必要に応じて要素数を自動的に増やす
③追加した順に並ぶ
④nullも値として追加できる
⑤重複した値も追加できる
⑥スレッドセーフではない
①、②の特徴は、配列の問題点をカバーするもの
③は配列のように値を番号で管理するため、追加した順に値が並ぶリスト構造である。ただし、任意の場所に挿入することもできる
⑥は並行処理したときに意図しない結果になることを防ぐ機能がついているかどうか
※スレッドセーフなリストを使いたい場合はjava.util.Vectorを使う
ジェネリックス
ArrayListの値を追加するaddメソッドの引数や、値を取り出すgetメソッドの戻り値はObject型になっているため、何でも扱うことができる
しかし、値が混在するコレクションはダウンキャストするとき例外が発生する可能性がある
そこで、型を指定することで、コレクションが扱える型を制限するジェネリックスという機能がある
例)ジェネリックス
ArrayList<String> list=new ArrayList<>;
指定している型のことを型パラメータ(例だとStringの部分)、ジェネリックスをより簡潔に書けるようにダイヤモンド演算子<>**(例だと右の<>)という機能がある
この機能によりインスタンスへの参照を保持する変数がどのような型変数で宣言しているかをコンパイラが判断し、同じ型を使ってインスタンス生成時の型変数を決めれる。これを型推論**と呼ぶ