※当サイトの記事には、広告・プロモーションが含まれます。

Java コレクション

これが、ワイのコレクションや~!どうも、まったく意味不明な発言を心より謝罪申し上げます。ということで、今回は、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();

    // キーをすべて取得
    Set students_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);      
    }

  }

}

 

今回はこのへんで。