コレクションフレームワーク
練習も兼ねて書き込みしました。
カテゴリの移動、訂正は気にせず行って下さい。
by Kudo
コレクションフレームワーク・・・データ構造を作るのに便利なクラス
主な種類
List型・・・配列に似た感じの構造。
ArrayListクラス、LinkedListクラスなど
Set型・・・一意な(重複しない)値を保持する構造。
HashSetクラス、LinkedHashSetクラス、TreeSetクラスなど
Map型・・・データをキーと値のセットで保持する構造。
HashMapクラス、TreeMapクラスなど
ArrayListを使った見本
※注意・・・ここでは、ジェネリクスという構文は敢えて使っていないので、コンパイル時に警告が出ます。コンパイルエラーでは無くて警告なので、無視していつも通り実行すると、動きます。
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator; //拡張for文を使う時は不要
public class ArrayListTest {
public static void main(String[] args) {
List employeeList = new ArrayList(); //ArrayListのインスタンスを生成
Employee emp1 = new Employee("Tanaka",20); //従業員クラス1の生成
employeeList.add(emp1); //ArrayListにemp1を追加
Employee emp2 = new Employee("Satoh" ,30); //従業員クラス2の生成
employeeList.add(emp2); //ArrayListにemp2を追加
Employee emp3 = new Employee("Suzuki" ,40); //従業員クラス3の生成
employeeList.add(emp3); //ArrayListにemp3を追加
System.out.println("拡張for文を使った場合");//Java SE5以降よりこの方法が利用可能。簡単。
//拡張for文
for(Object emp: employeeList){
System.out.println(emp);
}
System.out.println("拡張for文を使わなかった場合(イテレーターを使った方法");//Javaの古いバージョンの方法
//拡張for文を使わなかった場合
Iterator itr;
for (itr = employeeList.iterator(); itr.hasNext(); ){
System.out.println( itr.next() );
}
}
}
//従業員クラス
class Employee{
private String name;
private int age;
public Employee(String n, int a){
this.name = n;
this.age = a;
}
//getterとsetterは使わないので省略
//ObjectクラスのtoString()をオーバーライド(表示処理を簡単にする為)
public String toString(){
return "名前: " + name + "\n年齢: " + age ;
}
}
-
- -
【追記】-saka
(基本的なことを僕がわかってなかったのでメモっておきます)
Javaの配列の問題点は、宣言時に配列の要素数を決めてしまうと増やしたり減らしたりできないということ。
これを解決するためにまずArrayListが必要になったのだと思う。
①ArrayListは追加・削除ができる配列(→配列を追加・削除ができてるように見えるようにしてくれるクラス)
おそらくArrayListは追加や削除をするたびに配列のシーケンス番号を振りなおすんじゃないかと思う。ラーメン屋の行列で途中の人がいなくなった時にまた一番目から順に数を数えるみたいな感じ。それをなにかしら効率よくできるようにしたのがLinkedList
②配列要素の削除とか変更を頻繁にするならLinkedList
またキーと関連付けてデータを格納したい場合。たとえば出席番号をキーにして、生徒名簿を作るような時にはMap型のクラスを使う。これはArryListで自動的にシーケンス名キー番号が振られていたのを自分で設定できますよということだと思う。
③データ登録時にキーも指定したい場合はMap型
データの数ではなく種類を知りたい時。配列の要素を比較して重複するものは排除する。たとえばwebサイトのアクセス解析をするとして、ユニークユーザー数を知りたい場合などはSet型のクラスを使う。
配列を効率的に、簡便に扱うためのいろんな機能が用意されているということ。
-
- -