LoginSignup
1
0

スッキリわかるJava入門 第3版を読んでみて- part16 -コレクション

Last updated at Posted at 2023-09-01

はじめに

こんにちは(・ω・)ノ
今回はコレクションについて学びました!

第16章 コレクション

1.コレクションとは

配列のように「順序をつけて並べて格納する」...リスト
API版... コレクションフレームワーク

例:ArrayList
 配列に似たもの、リスト構造でデータを格納できる入れ物クラス
特徴は3つ
1.import文を記述する
 ArrayListクラスをはじめとするコレクションクラスはjava.utilパッケージに属す
2.<>記法を使って、格納するインスタンスの型を指定する
文字列の格納の時
 配列...String[]
  ArrayList...ArrayList
※<>を使った表現...ジェネリクス
<>の中身はDeroでもDateなどなんでもどんな種類のインスタンスでも格納できる
3.宣言時のサイズ指定は不要であり要素は随時追加できる
 宣言時にはこの宣言が不要
 データを追加する際に不足していれば自動的に追加されるため

:sparkles: コレクションにはできないこと
コレクションには、基本データ型の情報を格納することができない

8つの基本データに対応して「基本データ型の情報を中身に保持すること」
を責務とする8つのクラス → ラッパークラス
ラッパークラス型のインスタンスを基本データ型のデータを相互に自動変換する
オートボクシング、オートアンボクシング

2.ArrayListの使い方

:pencil2: ArrayListの宣言
ArrayList<~> 変数名 = new ArrayList<~>();

メソッドの種類
要素を追加する
 add() 挿入
 set() 上書き

要素の取り出し
 get() 要素の始まりが0からなのに注意

リストを調査する
 size() 要素数の調査
 isEmpty() 要素数が0かどうか
 contains() 値が「含まれているか」
 index Of() 「何番目の位置か」

要素を削除する
 clear() すべての要素を削除する
 remove() 指定位置の要素を削除

中身が省略された<>... ダイヤモンド演算子

要素を順に取り出す3つの方法
:pencil2: : for文を用いたリスト要素の取り出し

for(int i = 0; i < リスト変数.size(); i++){
 /*リスト変数.get(i)で要素の読み書き*/
}

:pencil2: 拡張for文を用いたリスト要素を取り出し

for(リスト要素の型 e :リスト変数){
 /** e で要素を読み書き/
}

コレクションクラスの中身を順に取り出すための専用... イテレーター
:pencil2: イテレーターの取得
Iterator<リスト要素の型> it = リスト変数.iterator();

※iteratorメソッドを呼ぶと...
 そのリストの先頭(最初の箱)よりもっと前を指定した状態の矢印が取得された

:pencil2: イテレータを用いたリスト要素の取り出し

Iterator<リスト要素の型> it = リスト変数.iterator();{
while(it.hasNext()){
 リスト要素の型 e = it.next();
 /*要素eを用いた処理*/
}

3.LinkedListの使い方

ArrayListの他にもLinkedListというクラスが用意されている
連結リストと呼ばれる構造を応用

内部構造の違いに起因した動作の違いがある
1.要素の挿入や削除に対する違い
2.添え字の指定に対する違い

ザックリいうとどっちもリスト!

:sparkles:インタフェース型の活用
引数・戻り値・ローカル変数には、極力あいまいな型(インタフェース型)
を利用できないかを検討し、積極的に利用する

4.Set関連のクラス

:sparkles:Setの基本特性
・それぞれの特性には、重複が許されない
・それぞれの要素には、基本的に順序関係がない

SetとListには似た部分がある、比較して注意すること3点
1.重複した値を格納しようとすると無視される
2.Set()やget()がない
3.要素を1つずつ取り出す場合の順序は不明
 中身を1つずつ取り出すときにどのような順序で要素が取り出されるかは保証されない

:sparkles:順序が保証されるSetバリュエーション
LinkedHashSet:値を格納した順序に整列
TreeSet:自然順序付けで整列
※自然順序付け...それぞれのクラス固有の順序

5.Mapの使い方

Mapとは...2つの情報を キー のペアとして格納するデータ構造

:pencil2: HashMapのインスタンス化

Map<キーの型、値の型> マップ変数=
 new HashMap<キーの型、値の型>();

Mapでは値の重複はOK、 キーの重複はNG

:pencil2: マップに格納された情報を1つずつ取り出す

for(キーの値 key: マップ変数.keySet()){
 値の型 value = マップ変数.get(key);
/*keyとvalueを用いて何らかの処理を行う*/

6.コレクション活用

:sparkles: 格納しているのは参照
格納前や取得後の変数のインスタンスを書き換えると、
コレクションに格納中の要素も書き換わる恐れがある

:sparkles: Hash系コレクションの制約
HashSetやHashMapに格納するクラスは、equals()およびhashCode()を
正しくオーバーライドしていないと意図しない動作をすることがある

まとめ

主なコレクションとしてはList,Set,Mapの3種類があり、目的に応じて使い分ける
→Listは要素の格納
→Setは要素の取り出し
→Mapはペアの集まりを取り出し

上の感じで大体のコレクションの特性を大まかに理解しました!
コレクションの活用について理解を深める必要があると感じました(´ω`)

今回もありがとうございました!
ではまた〜 *˙︶˙*)ノ"

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0