見出し画像

JavaSilverに向けて⑫ コレクション

・コレクションの特徴


  ー 同じ型、互換性のある型しか使えない
  ー 扱える要素数を最初に決める必要がある
  ー 要素アクセスには添字を使わなければならない
  ー 要素アクセスの際には、要素数を超えないようにしなければならない
*要素数を超えて、アクセスしようとすると例外が発生する。

・コレクションの種類


List 順序通りに並べて格納
Set 順序があるかは限らず格納
Map ペアで対応づけて格納
*Mapはvalueの重複は許容するがkeyの重複は許容しない。そのため、同じキーで異なる値が渡されると後の値で上書きされる。

・ArrayList


コレクションを扱えるクラスの1つ。一応初期サイズとして10個の要素が格納できるArrayListが作成される。このサイズは足りなくなれば、自動で拡張されるから意識する事は少ない。
ArrayListの場合は、nullを値として扱えるし、重複した値を入れる事もできる。値は追加した順に並ぶ。
  ー オブジェクトの作成
以下の2つの方法
ArrayList 変数名 = new ArrayList();
ArrayList<型> 変数名 = new ArrayList<型>();

  ー 値の追加
addメソッドを使う事で、値を追加する事ができる。
addで値を追加する事で、リストの最後に値が追加される。
ArrayList<String> a = new ArrayList<String>();
a.add(“hello”);
下記のように書く事もできる。
a.add(new String(“hello”);
コレクションは自動で拡張されていくので、格納する要素の数は意識する事なく追加する事ができる。

  ー 値の追加の場所を指定するadd
.add(2, “A”);
上記はAを3番目に追加するという意味。

  ー 要素の取り出し
get(int index)
indexには、要素のindexをいれる。
indexが範囲外の場合はIndexOutOfBoundExceptionの例外が出される。

  ー 要素を置き換える
set(int index, E element)
指定された位置にある要素を指定された要素で置き換える。
index : 置換される要素のindex
element : 指定された位置に格納される要素

  ー 要素の削除
E remove(int index)
リスト内の指定された位置から要素を削除する。
boolean remove(Object o)
指定された要素がこのリストにあれば、その最初のものをリストから削除する。指定された要素が存在していればtrueを返す。
*removeメソッドは、条件に合致するかどうかをリストの先頭から順番に見ていく。条件に合致するかどうかは、リストの先頭から順番に見ていくため、インデックスの若い方から削除される。
また、clear()を行うと、リストから全ての要素を削除する。リストが空となる。

  ー 条件のラムダ式がtrueであれば要素を削除する
boolean removeIf(Predicate<? super E>filter)
引数で渡された式がtrueであれば、要素を削除する。

  ー 要素を比較し一致しないものを探すmismatch
引数で渡された2つの配列の要素を先頭から順番に比較する。一致しない要素のインデックスを返す。
一致しない要素が複数あっても、最初のインデックスしか返さない。
また、全ての要素が一致する場合は-1が返される。

  ー 要素を比較するcompare
アルファベットや数字、平仮名やカタカナ、漢字などあらゆるものを比較する事ができる。基本的にアルファベット順で比較される。
引数で受け取った2つの配列が等しい場合は0を返す。
第一引数が第二引数よりも先の値であれば負の値を返す。
第二引数が第一引数よりも先の値であれば正の値を返す。


・ArrayListとスレッドについて


ArrayListはスレッドセーフなクラスではないため、一方のスレッドでArrayListの値を読み込んでいる際に、もう一方のスレッドで同じArrayListのインスタンスから要素を削除しようとすると、ConcurrentModificationExceptionの例外が出る。
この例外は1つのスレッドだけでもおこる。以下のように、removeで要素を削除した後に、読み込もうとしても上記の例外が発生する。
ArrayList<String> list = new ArrayList<>();
~
for (String str : list) {
    if (~){list.remove(str);}
}
for(String str : list){~}

・ArrayListと固定長について


ArrayListは「動的配列」とも呼ばれ、要素数を動的に増やす事ができる。
要素数を固定する、固定長のリストを作る事もできる。固定長のリストを作る際には、asListメソッドとofメソッドを作る。
固定長リストに対して追加や削除を行った場合には、UnsupportedOperationExceptionという例外が発生する。

この記事が気に入ったらサポートをしてみませんか?