JAVA入門③ 配列とコレクション 簡単JAVA説明⑪ 配列 ★配列 1.配列とは? 「同じ型の値を複数まとめて記憶する という機能を持つもの」ということですが、 イメージとしては、同じ型の入れ物を複数用意する というイメージです。 int int int 簡単JAVA説明⑪ 配列の準備 2.配列の準備 行うことは次の2つです。 ① 配列の宣言 ② 配列要素の確保 簡単JAVA説明⑪ 配列の宣言 3. ① 配列の宣言 構文 型 識別子[] 配列変数名 = new 型名[]; 例 int test[]; int test = new int[3]; int int int 簡単JAVA説明⑪ 配列の宣言 解説① int test[]; は int型の箱を用意するつもり という宣言です。 次に test = new int[3]; は 具体的に3個用意 するということです。 実際にできる箱は int int test[0]、 test[1]、 test[2] と名前がつけられます。 test[0] test[0] int int test[0] 簡単JAVA説明⑪ 配列の宣言 解説② 配列の番号は0からはじまりますので、 最大の番号は「要素数-1」です。 test[0]、test[1]、test[2]はありますが、test[3] はありません。 簡単JAVA説明⑪ 配列値代入 4.配列に値の代入 構文 配列変数名[添字] = 式; 例. int test[]; test new = int[3]; test[0] =10; test[1] =20; test[2] =30; 簡単JAVA説明⑪ 配列の利用 5.配列の利用 繰り返し文との併用 配列の各要素に値代入の後、for文を用いて、値出力 Sample1. 配列添え字が0からなので、出力の順番はi+1とします。 i i+1 0 → 1番目 1 → 2番目 2 → 3番目 3 → 4番目 4 → 5番目 簡単JAVA説明⑪ 配列の利用 class Sample01 { public static void main(String[] args) { // 整数の配列型の変数testを宣言 int[] test; // 整数のサイズ5の配列を作成し、参照をtestに割り当 てる test = new int[5]; // 配列testの各要素に点数を代入する test[0] = 80; test[1] = 60; test[2] = 22; test[3] = 50; test[4] = 75; 簡単JAVA説明⑪ 配列の利用 // ループ変数iを0から(5-1)まで1ずつ変化させて、 // その間以下の処理を繰り返す for (int i = 0; i < 5; i++) { // 配列testのi番目の要素の値を表示する。 System.out.println((i + 1) + "番目の人の点数は" + test[i] + "です。"); } } } 簡単JAVA説明⑪ 配列の利用 実行結果 1番目の人の点数は80です。 2番目の人の点数は60です。 3番目の人の点数は22です。 4番目の人の点数は50です。 5番目の人の点数は75です。 簡単JAVA説明⑪ よくある間違い ◎配列のよくある間違い 次はどこが間違いでしょう? int test[]; test = new int[5]; test[5] = 5; 簡単JAVA説明⑪ 答え test[5] はありません。 test[0]、 test[1]、 test[2]、 test[3]、 test[4] の5つが用意されます。 簡単JAVA説明⑪ 配列の宣言2 6.配列の宣言2 構文 型 配列変数名[] = new 型名[]; つまり、 int test[]; test = new int[3]; はひとつで int test[] = new int[3]; と書けます。 簡単JAVA説明⑪ 配列の初期化 7.配列の初期化 構文 配列 配列変数名[]={値1、値2、・・・}; 例 int test [] = { 10, 20, 30 } ; つまり、初期化においては 宣言、要素の確保、値代入が一度で記述さ れていることになる。 簡単JAVA説明⑪ 変数への代入 8.配列変数(配列変数への代入) Sample5におきまして int test1[]= new int[2]; test1[0]=10; test1[1]=20; int test2 [] ; test2 = test1 ; という代入構文では、 test1の配列とtest2の配列は 同じ配列を指し示します。 つまり、 test2はあくまで、 test1の配列を指ししめし ているにすぎません。(Sample6参照) 簡単JAVA説明⑪ 配列の応用 9.配列の応用 配列の長さを知る構文 配列変数名.length 例 test.length =>Sample7 簡単JAVA説明⑪ 配列のソート 10.応用例、配列のソート test[0]=22、test[1]=80、test[2]=57、test[3]=60 test[4]=50 の場合 test[0] と test[1]を比較、多きければ入れ替え temp=test[0]; test[0]= test[1]; からtest[0]=80、 test[1]=22 以下これを繰り返す。(=>Sample9) 簡単JAVA説明⑪ 多次元配列 11.多次元配列(2次元配列) 構文 型名 配列変数名[][]; 配列変数名 = new 型名[要素数][要素数]; 例 int test[][]; test = new int [][]; 簡単JAVA説明⑪ 多次元配列 2次元のイメージ int test[][] = new int [4][5]; の場合 [0][0] [0][1] [0][2] [0][3] [0][4] [1][0] [1][1] [1][2] [1][3] [1][4] [2][0] [2][1] [2][2] [2][3] [2][4] [3][0] [3][1] [3][2] [3][3] [3][4] 簡単JAVA説明⑪ 多次元配列 初期化 int test [][] = { {10、20}、{30、40} }; は int test[][] = new int[2][2]; test[0][0] =10; test[0][1] =20; test[1][0] =40; test[1][1] =40; と同じ意味。 簡単JAVA説明⑪ 配列まとめ 1.配列基本構文の理解 その① 型 識別子[] 配列変数名 = new 型名[]; その② 型 配列変数名[] = new 型名[]; 2.初期化 3.利用 4.応用(length、ソート) 5.代入 6.多次元配列 簡単JAVA説明⑫ コレクション(リスト、セットとマップ) コレクション(リスト、セットと マップ) は、オブジ ェクトの集合を扱うための仕組みです。 次頁に一覧を与えます。 ※JDK1.4から1.5になりまして取り扱いがか わりました。 ★最後の頁の「Generic型について」も参照くだ さい。 カテゴリ クラス List系 ArrayList 配列を扱います。 LinkedList 配列を扱います。挿入・削除が高速です。 Set系 Vector 配列を扱います。現在は推奨しません。 (パフォーマンスが悪いため) HashSet 値の重複を許さない順不同の要素集合 を扱います。 値の重複を許さないソートされたの要素 集合を扱います。 キーと値の組からなる要素の集合を扱 います。 キーと値の組からなる要素の集合を扱 います。キーでソートされています。 TreeSet Map系 HashMap TreeMap 簡単JAVA説明⑫ ArrayListの例 import java.util.*; class ArrayListTest { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String> (); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } } 簡単JAVA説明⑫ ArrayListの使用 ArrayList は配列を扱う一般的なクラスです。 以下のメソッドが用意されています。 • • • • • • • • List.add(o) - オブジェクト o を配列の末尾に追加する List.add(n, o) - オブジェクトを n で指定した場所に追加する List.get(n) - n番目の要素を得る List.remove(n) - n番目の要素を削除する List.set(n, o) - n番目の要素をオブジェクト o で置き換える List.size() - 要素の個数を得る List.isEmpty() - 空かどうか調べる List.indexOf(o) - オブジェクト o と等しい要素のインデックスを探 す • List.contains(o) - オブジェクト o と等しい要素があるか調べる • List.addAll(list2) - 配列の末尾に配列 list2 を追加する 簡単JAVA説明⑫ Linked List LinkedList も ArrayListと同じように使用するこ とができます。挿入や削除を頻繁に行う場合 は ArrayList よりも LinkedList の方が高速で す。ただし、get() による参照は ArrayList の 方が高速です。 簡単JAVA説明⑫ LinkedListの例 import java.util.*; class LinkedListTest { public static void main(String[] args) { LinkedList<String> list = new LinkedList<String>(); list.add("AAA"); list.add("BBB"); list.add("CCC"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } } LinkedList & ArrayList実行結果 AAA BBB CCC 簡単JAVA説明⑫ HashSet HashSet も配列を扱いますが、要素の重複が 許されない、順序の保障が無い点が ArrayList や LinkedList と異なります。要素を 参照する際には iterator を用います。 ※ iteratorにつきましては深く取り扱いません 興味ある方は質問してくださるか、説明のある 本等ご参照ください。 簡単JAVA説明⑫ HashSetの例 import java.util.*; class HashSetTest { public static void main(String[] args) { HashSet<String> set = new HashSet<String>(); set.add("AAA"); set.add("BBB"); set.add("CCC"); set.add("AAA"); Iterator it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } } 簡単JAVA説明⑫ HashSetの例 解説 実行結果は下記のようになります。AAA を 2回 add() していますが、重複要素がひとつに マージされます。結果の順序は add() した順 序に関係なくバラバラになります。 実行結果 CCC AAA BBB 簡単JAVA説明⑫ HashSetの使用 下記のメソッドが用意されています。 • set.add(o) - オブジェクト o を配列の末尾に追加する • set.clear() - 配列をクリアする • set.contains(o) - オブジェクト o と等しい要素があるか 調べる • set.isEmpty() - 空かどうか調べる • set.remove(o) - オブジェクト o にマッチする要素を削 除する • set.size() - 要素の個数を得る • set.iterator() –反復子、統一的にループを構成可能 簡単JAVA説明⑫ TreeSet TreeSet も HashSetと同じように使用できます。 要素が自動的にソートされる点が HashSet と 異なります。 簡単JAVA説明⑫ TreeSetの例 import java.util.*; class TreeSetTest { public static void main(String[] args) { TreeSet<String> set = new TreeSet<String>(); set.add("CCC"); set.add("AAA"); set.add("BBB"); set.add("AAA"); Iterator it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } } TreeSetの実行結果 AAA BBB CCC 簡単JAVA説明⑫ HashMap HashMap は、名前(キー)と値の組み合わせを 要素として持つ配列です。 ※ HashMapにつきましては拡張ループなどと の関わりあいの話もあるのですが深く取り扱 いません。興味ある方は質問してくださるか、 説明のある本等ご参照ください。 簡単JAVA説明⑫ HashMapの例 import java.util.*; class HashMapTest { public static void main(String[] args) { Map<String, Integer> m = new HashMap<String, Integer>(); m.put("AAA",1); m.put("BBB",2); m.put("CCC",3); //キーから値を取得して表示 System.out.println(m.get("AAA")); System.out.println(m.get("BBB")); System.out.println(m.get("CCC")); } } HashMap 実行結果 1 2 3 簡単JAVA説明⑫ TreeMap TreeMap も HashMapと同じように使用できます。 要素がキーによって自動的にソートされる点 が HashMap と異なります。 次のサンプルにもありますようにiteratorを用 いた表示も可能です。 簡単JAVA説明⑫ TreeMapの例 import java.util.*; class TreeMapTest { public static void main(String[] args) { TreeMap<String, Integer> map = new TreeMap<String, Integer>(); map.put("AAA", 1); map.put("BBB", 2); map.put("CCC", 3); Iterator it = map.keySet().iterator(); while (it.hasNext()) { Object o = it.next(); System.out.println(o + " = " + map.get(o)); } } TreeMap 実行結果 AAA = 1 BBB = 2 CCC = 3 Generic型について 例で用いました、 ArrayList<String> list = new ArrayList<String> (); で<String>は見慣れない記法かと思いますが、これは 「要素がString 型のArrayList」 という意味になります。 ArrayList<String>をパラメータ付き型、 Stringを型パラ メータといいます。この場合、コレクション・オブジェクト に格納するデータの型を限定することを可能としてお ります。コレクションから取り出すデータ型にもその型 が適用されます。型パラメータを使って型の宣言がで きる機能のことをGenericsといいます。
© Copyright 2025 ExpyDoc