この章で行う学習内容
コレクションフレームワーク
コレクションフレームワークとは
要素(Object)の集まりを操作する為のインタフェース郡のことです。
主に以下の3つを使います。
・List
・Map
・Set
☆インタフェース☆
この3つのインタフェースを継承してとても便利なクラスが容易されていますので、1つずつ見て行きます。
主に以下の3つを使います。
・List
・Map
・Set
☆インタフェース☆
この3つのインタフェースを継承してとても便利なクラスが容易されていますので、1つずつ見て行きます。
ArrayList(List)
Object型であれば何個でも値を保持出来る可変長配列になります。
可変長配列は、値を入れる箱が足りなくなれば、自動的に箱を追加してくれます。
なので、好きな数だけ値を保持することが出来ます
可変長配列はプリミティブ型以外の
全てのオブジェクト型を格納することが出来ます。
使い方
使い方は通常のクラスと同じです。
可変長配列は、値を入れる箱が足りなくなれば、自動的に箱を追加してくれます。
なので、好きな数だけ値を保持することが出来ます
可変長配列はプリミティブ型以外の
全てのオブジェクト型を格納することが出来ます。
使い方
使い方は通常のクラスと同じです。
例文
//まずインスタンスを生成します。 ArrayList<Object> li = new ArrayList<Object>(); //次に値をセットします。 li.add(オブジェクト); //値を取り出します。 Object oj = li.get( int );
ポイント!
値のセットも取り出しもObject型で行います。
その為、String型を格納したのであれば、
String型にクラスキャストして取り出す必要があります。
値のセットも取り出しもObject型で行います。
その為、String型を格納したのであれば、
String型にクラスキャストして取り出す必要があります。
HashMap(Map)
Object型であれば何個でも値を保持出来る可変長配列で、連想配列になります。
連想配列は、プロパティファイルに似ていて、キーと値で管理します。
その為、配列のような値の順番はありません。
連想配列は、プロパティファイルに似ていて、キーと値で管理します。
その為、配列のような値の順番はありません。
例文
//まずインスタンスを生成します。 HashMap<Object> mp = new HashMap<Object>(); //次に値をセットします。 mp.put(キー, 値); //値を取り出します。 Object oj = mp.get(キー);
※ キーはオブジェクトです。
ポイント!
キーが同じものをセットしようとすると、
以前の値が上書かれます。
キーが同じものをセットしようとすると、
以前の値が上書かれます。
HashSet(Set)
ArrayListに似ていますが、1箇所だけ違う箇所があります。
違うのは、要素番号がないというところで、それ以外は同じです。
違うのは、要素番号がないというところで、それ以外は同じです。
例文
//まずインスタンスを生成します。 HashSet<object> st = new HashSet<object>(); //次に値をセットします。 st.add(オブジェクト); /*値の取り出し
hashsetには要素番号がありません。 その為、「ここの値を取得する」 というような処理を行うことが出来ません。 取得するときは「全ての値」になります。 */
ポイント!
値自体がキーの役目をしますので、
値が重複することはありません。
値自体がキーの役目をしますので、
値が重複することはありません。
ジェネリックス (Generics)
ジェネリックス (Generics) というのはオブジェクト指向言語でクラスやメソッド を定義する際に、それらが処理対象とするデータ型を特定せず、パラメータとして定義 できる機能です
List<t>クラスの"t"が、このリストに格納できるオブジェクトの型を表すパラメータで、 実際にリストの変数やインスタンスを生成するときに指定します。例えばStringオブジェクト のリストを使いたい場合には、パラメータtをStringとして
List<String> List= new List<String>();
といったコードでStringオブジェクトのリストを作れます。
※String以外の任意のクラスでも同じリスト・クラスのコードを再利用可能です。
しかも実行時には処理対象の型が特定されるので、型の安全性も確保されます。
List<t>クラスの"t"が、このリストに格納できるオブジェクトの型を表すパラメータで、 実際にリストの変数やインスタンスを生成するときに指定します。例えばStringオブジェクト のリストを使いたい場合には、パラメータtをStringとして
List<String> List= new List<String>();
といったコードでStringオブジェクトのリストを作れます。
※String以外の任意のクラスでも同じリスト・クラスのコードを再利用可能です。
しかも実行時には処理対象の型が特定されるので、型の安全性も確保されます。
Iterator
コレクションフレームワークの値を取り出す役割を持っているものです。
内部にコレクションを保持し、それを取り出す役割をします。
iterator()メソッド
コレクションフレームワークからiteratorインスタンスを取得する為のメソッドです。
hasnext()メソッド
次の要素があるかチェックして、あればtrueを、無ければfalseを返します。
next()メソッド
次の要素を取り出して、参照場所を1つ進みます。
内部にコレクションを保持し、それを取り出す役割をします。
iterator()メソッド
コレクションフレームワークからiteratorインスタンスを取得する為のメソッドです。
hasnext()メソッド
次の要素があるかチェックして、あればtrueを、無ければfalseを返します。
next()メソッド
次の要素を取り出して、参照場所を1つ進みます。
HashSetからIteratorを取得
HashSet set = new HashSet(); set.add( "あ" ); set.add( "い" ); // Iteratorの取得 Iterator itr = set.iterator(); // 要素があるだけループ while( itr.hasNext() ) { // 要素はStringなのでキャスト String str = (String)itr.next(); System.out.println( str ); }
HashMapからIteratorを取得
HashMapの場合、キーが分からないと価を取得することが出来ません。
HashMapのインスタンスがあって、キーは分からないが、値を全て取得したい場合に、
Iteratorを取得して取り出します。
HashMapのインスタンスがあって、キーは分からないが、値を全て取得したい場合に、
Iteratorを取得して取り出します。
HashMap map = new HashMap(); map.put( "りんご", "Apple" ); map.put( "みかん", "Orange" ); //================================ // マップの全要素取得処理 //================================ // マップのキーの一覧をSetで取得 Set keys = map.keySet(); // Iteratorの取得 Iterator itr = keys.iterator(); while( itr.hasNext() ) { Object key = itr.next(); Object val = map.get( key ); // 処理 }