これが、ワイのコレクションや~!どうも、まったく意味不明な発言を心より謝罪申し上げます。ということで、今回は、Javaのコレクションクラスについてです。
コレクションクラス
配列のように、複数の要素を格納できます。配列のように初めに要素数を決める必要がないため、要素数が決められない場合に利用されます。
インターフェース | 実装クラス | 要素の重複 |
---|---|---|
List | ArrayList | 〇 |
List | LinkedList | 〇 |
Map | HashMap | × |
Map | TreeMap | × |
Set | HashSet | × |
Set | TreeSet | × |
この中では、ArrayList、HashMapが使われることが多いようです。
ArrayListを使ってみる
package cllections; import java.util.ArrayList; import java.util.List; public class collectionList { public static void main(String[] args) { // Listの生成 List<String> list = new ArrayList<String>(); // 値の追加 add(String value) list.add("Windows"); list.add("Linux"); list.add("OS X"); // indexを指定してadd値の追加 (int index, String value) list.add(1, "Solaris"); // 結果の表示 System.out.println("リストの内容: "); for(String str: list) { System.out.print(str + ", "); } System.out.println(); // 要素を個々に取得 int n = 1; System.out.println((n + 1) + "番目の要素は" + list.get(n)); // 値の存在確認 contains(String value) String s = "Linux"; System.out.println("リスト内に" + s + "は存在します。" + list.contains(s)); // 要素数の削除 remove(int index) int element = 0; list.remove(element); System.out.println(list); // 要素数を確認 if(!list.isEmpty()) { System.out.println("要素数:" + list.size()); } // すべての要素の削除 list.clear(); System.out.println(list); list = null; System.out.println(list); } }
HashMapを使ってみる
package cllections; import java.util.HashMap; import java.util.Map; import java.util.Set; public class collectionMap { public static void main(String[] args) { // HashMapの生成 Map<String, String> map = new HashMap<String, String>(); // 要素(『キー:値』のペア)を追加 map.put("パソコン", "personal computer"); map.put("エアコン", "air conditioner"); map.put("リモコン", "remote controller"); // すべてのキーを取得する System.out.println("キー(key)" + map.keySet()); // すべての値を取得する System.out.println("値(value)" + map.values()); // キーとセットになる値を取得する Set<string> set = map.keySet(); for(String str: set) { // 『キー:値』の形で出力 System.out.println(str + ": " + map.get(str)); } // 値の存在確認 String str = "エアコン"; System.out.println("リスト内に" + str + "は存在します。" + map.containsKey(str)); // 要素数(『キー:値』のペア)の確認 if(!map.isEmpty()) { System.out.println("要素数は:" + map.size() + "個です。"); } // 要素の削除 map.remove("パソコン"); System.out.println(map); // すべての要素の削除 map.clear(); System.out.println(map); } }
イテレーターなど。
package collectionsFramework; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class AutoBoxingSample { public static void main(String[] args) { // ジェネリクスには、プリミティブ型が使えない List<integer> list = new ArrayList<integer>(); Integer n = new Integer(50); list.add(n); list.add(new Integer(60)); int num = 70; // Boxing機能によって、自動的にラッパークラスのオブジェクトに変換してくれる list.add(num); list.add(100); int sum = 0; // UnAutoBoxing System.out.println(sum + list.get(0)); // 反復子iteratorの使用 Iterator<integer> it = list.iterator(); while (it.hasNext()) { sum = sum +it.next(); // Integer integer = (Integer) it.next(); } System.out.println("sum = " + sum); } }
総合演習
点数に、-1が入力されたら処理を終了。
package cllections; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.Set; public class StudentsTest { public static void main(String[] args) { // 生徒の名前と点数を格納するHashMap Map<String, Integer> students = new HashMap<String, Integer>(); // キーボードからの入力用のインスタンス BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int score = 0; String name = ""; do { try { System.out.println("名前を入力してください"); name = br.readLine(); System.out.println("点数を入力してください"); score = Integer.parseInt(br.readLine()); if(score == -1) { break; } students.put(name, score); } catch (NumberFormatException e) { // e.printStackTrace(); } catch (IOException e) { // e.printStackTrace(); } } while(true); // 合計点 int sum = 0; for(int num: students.values()) { sum += num; } // 平均点 int avg = 0; avg = sum / students.size(); // キーをすべて取得 Set<String> students_name = students.keySet(); // 最大・最小 int max = 0; int min = 0; for(int num: students.values()) { // 基準点 max = num; min = num; for(String str: students_name) { // 最大 if(max < students.get(str)) { max = students.get(str); } // 最小 if(min > students.get(str)) { min = students.get(str); } } // 1周目ですべての値がチェックされるので、処理を抜ける break; } // 受賞者 String max_person = ""; String min_person = ""; for(String str: students_name) { if(max == students.get(str)) { max_person += (str + " "); } if(min == students.get(str)) { min_person += (str + " "); } } System.out.println("合計点: " + sum); System.out.println("平均点: " + avg); System.out.println("最高点: " + max + "\n最高点受賞者: " + max_person); System.out.println("最低点: " + min + "\n最低点受賞者: " + min_person); } }
最大・最小のところがだいぶ怪しげなコードになってしまっているので、明日、解答をもらって復習したいと思います。
2017年7月13日 追記
講師の先生の解答をいただきました。勉強になります。
package cllections; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class StudentsTest2 { public static void main(String[] args) { // 生徒の名前と点数を格納するHashMap Map<String, Integer> students = new HashMap<String, Integer>(); // キーボードからの入力用のインスタンス BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int score = 0; String name = ""; do { try { System.out.println("名前を入力してください"); name = br.readLine(); System.out.println("点数を入力してください"); score = Integer.parseInt(br.readLine()); if(score == -1) { break; } students.put(name, score); } catch (NumberFormatException e) { // e.printStackTrace(); } catch (IOException e) { // e.printStackTrace(); } } while(true); // 合計点 int sum = 0; for(int num: students.values()) { sum += num; } // 平均点 int avg = 0; avg = sum / students.size(); // キーをすべて取得 Setstudents_name = students.keySet(); // 最大・最小 int max = 0; int min = 999; // 受賞者 String max_person = ""; String min_person = ""; for(String keyName: students_name) { // 最大 if(max < students.get(keyName)) { max = students.get(keyName); max_person += keyName + " "; } // 最小 if(min > students.get(keyName)) { min = students.get(keyName); min_person += keyName + " "; } } System.out.println("合計点: " + sum); // 0で除算されないように if(students.size() != 0) { System.out.println("平均点: " + avg); System.out.println("最高点: " + max + "\n最高点受賞者: " + max_person); System.out.println("最低点: " + min + "\n最低点受賞者: " + min_person); } } }
今回はこのへんで。