LoginSignup
0
1

More than 1 year has passed since last update.

[Java] コレクション List Map Setについて

Posted at

はじめに

Java学習中にでてきたコレクションについてまとめました

コレクションAPI

オブジェクトの集合を管理、操作するJava標準のAPI
オブジェクトの集合 → コレクション
コレクションの集合 → 要素

よく使うAPI(予め要素の追加・削除などのメソッドが用意されている)

  • List
  • Map
  • Set

List

配列同様インデックス番号順序に要素を管理するコレクション、要素の重複ok
List自体はインターフェースなのでListを実装しているArrayListLinkedListなどを使用(import)する必要がある
(import java.util.ArrayList;)

配列との違い

配列:要素数の指定が必要
List:要素数の指定が必要なく要素の追加・削除するたびにサイズが増減

基本形
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

// ArrayListを生成
List<String> list1 = new ArrayList<String>();

// LinkedList
List<Integer> list2 = new LinkedList<Integer>();
操作
/*-- 要素の追加 --*/
list1.add("クッキー");
list1.add("ケーキ");
// 位置の指定追加も可能 クッキー、プリン、ケーキの順になる
list1.add(1, "プリン");
// 位置指定を要素数より多くすると実行時エラー
list1.add(15, "ホットケーキ");

/*-- 要素の取得 --*/
list1.get(0); //=> 「クッキー」が出力

/*-- 要素の存在チェック --*/
list1.contains("プリン") //=> true

/*-- 要素数の取得 --*/
list1.size(); //=> 3を返す

/*-- 要素の削除 --*/
list1.remove("クッキー"); // 文字列として同じなら削除される
list1.remove(0); //=> プリンが削除
// 要素数よりも大きいと実行時エラー
list1.remove(5);
ArrayListとLinkedListの違い

どちらもimportすればListが使えるようになるが細かい違いがあるらしい
状況に応じ使い分ける必要がある

  • インデックス指定で要素を取り出すのはArrayListの方が速い
  • 先頭から順に処理をするのはArrayListの方が速い
  • 要素の挿入はLinkedListの方が速い
  • 要素の削除はLinkedListの方が速い

Map

「キー」と「値」の組み合わせで要素を管理するコレクション
「キー」:重複はしない、「値」:重複ok
追加した要素の順番は保証されない
HashMapTreeMapをimportする

基本形
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

// HashMapを生成する場合
Map<Integer, String> map1 = new HashMap<Integer, String>();

// TreeMapを生成する場合
Map<String, String> map2 = new TreeMap<String, String>();
操作
/*-- 要素の追加 --*/
map1.put(0, "クッキー");
map1.put(3, "ケーキ");
// 登録済みのキーで追加すると上書きされる、クッキーが消える
map1..put(0, "プリン");

/*-- 要素の取得 --*/
// 存在しないキーを指定するとnullが返る
map1.get(5); //=> null

/*-- 要素の存在チェック --*/
map1.containsKey(0); //=> true
map1.containsValue("登録してない要素"); //=> false

/*-- 要素の取得はListと同じ --*/
map1.contains("プリン") //=> true

/*-- 要素の削除 --*/
map1.remove(1); //=> 該当がなければ何も起こらない
map1.remove(3, "登録していない要素") //=> 値が該当しないので何も起こらない

Set

位置(インデックス)やキーなどの要素を特定する概念がない、ただの集合
要素を取り出したい時は繰り返し処理をする(拡張for文やラムダ式)

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;

// HashSetを生成する場合
Set<String> set1 = new HashSet<String>();

// LinkedHashSetを生成する場合
Set<Integer> set2 = new LinkedHashSet<Integer>();
操作
/*-- 要素の追加 --*/
set1.add("クッキー");
set1.add("ケーキ");
// 位置の指定はできない

/*-- 特定の要素の取得はできない --*/

/*-- 要素の存在チェック、Listと同じ --*/
set1.contains("クッキー") //=> true

/*-- 要素数の取得、同じ --*/
set1.size(); //=> 3を返す

/*-- 要素の削除、インデックス指定はできない --*/
set1.remove("クッキー"); // 文字列として同じなら削除される
list1.remove("登録してない要素"); //=> 何も起こらない

最後に

Railsでは何も考えずに使ってた配列が、Javaでは配列・コレクションで違いがあるという認識をしました
使いながらもっと理解していこうと思います

閲覧頂きありがとうございました!

0
1
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
0
1