JAVA入門③ 配列とコレクション.

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

プログラミング実習 1 ・ 2 ク ラス 第 2 週目 担当教員 : 渡邊 直樹. 課題 2 ● 2 × 2型行列の固有値, 固有ベクトルを求め る EigMatrix.java というプログラムを作成せ よ。 ● 行列の各要素はコマンド・プロンプトから入力 ● 計算した結果もコマンド・プロンプトに表示.
初年次セミナー 第8回 データの入力.
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
プログラミング基礎I(再) 山元進.
プログラミング言語としてのR 情報知能学科 白井 英俊.
~手続き指向からオブジェクト指向へ(Ⅰ)~
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
第4章 配 列 オブジェクト指向Javaプログラミング入門 近代科学社©2008 Toru Kato Masahiro Higuchi
C言語 配列 2016年 吉田研究室.
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
アルゴリズムとデータ構造 2011年6月13日
情報基礎A 第11週 プログラミング入門 VBAの基本文法3 配列・For~Next
データ構造と アルゴリズム 第八回 知能情報学部 新田直也.
データ構造とアルゴリズム論 第2章 配列(構造)を使った処理
第20章 Flyweight ~同じものを共有して無駄をなくす~
最短経路.
JAVA入門② 変数と型 式と演算子 制御文.
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
プログラミング言語入門 手続き型言語としてのJava
JAVA入門.
アルゴリズムとプログラミング (Algorithms and Programming)
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
第3回 2007年4月27日 応用Java (Java/XML).
シューティングゲーム.
Collection, Generics, Iterator
前回の練習問題.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
アルゴリズムとデータ構造1 2005年6月24日
アルゴリズムとデータ構造 2010年6月21日
計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング 3 2 次元配列.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 2012年7月2日
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとプログラミング (Algorithms and Programming)
コレクション・フレームワーク J2EE I (データベース論) 第6回 /
コレクション・フレームワーク データベース論 第7回.
暗号技術 ~JAVAプログラム②~ (6週目)
アルゴリズムとデータ構造 2011年6月28日
サブゼミ第7回 実装編① オブジェクト型とキャスト.
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
アルゴリズムとデータ構造 2013年7月2日
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
第5回 配列.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

JAVA入門③ 配列とコレクション

簡単JAVA説明⑪ 配列 ★配列 1.配列とは? 「同じ型の値を複数まとめて記憶する という機能を持つもの」ということですが、   「同じ型の値を複数まとめて記憶する   という機能を持つもの」ということですが、   イメージとしては、同じ型の入れ物を複数用意する   というイメージです。 int int int

簡単JAVA説明⑪ 配列の準備 2.配列の準備   行うことは次の2つです。   ① 配列の宣言   ② 配列要素の確保

簡単JAVA説明⑪ 配列の宣言 3. ① 配列の宣言 構文 型 識別子[] 配列変数名 = new 型名[]; 例 int test[]; 3. ① 配列の宣言    構文    型 識別子[]   配列変数名 = new 型名[]; 例      int test[]; test = new int[3]; int int int int

簡単JAVA説明⑪ 配列の宣言 解説① int test[]; は int型の箱を用意するつもり という宣言です。 次に test = new int[3]; は 具体的に3個用意 するということです。 実際にできる箱は test[0]、 test[1]、 test[2] と名前がつけられます。 int int int int test[0] test[0] test[0]

簡単JAVA説明⑪ 配列の宣言 解説② 配列の番号は0からはじまりますので、 最大の番号は「要素数-1」です。  test[0]、test[1]、test[2]はありますが、test[3] はありません。  

簡単JAVA説明⑪ 配列値代入 4.配列に値の代入 構文 配列変数名[添字] = 式; 例. int test[]; 配列変数名[添字] = 式; 例. 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[];    構文    型 配列変数名[]  = new 型名[];  つまり、      int test[]; test = new int[3]; はひとつで int test[] = new int[3]; と書けます。

簡単JAVA説明⑪ 配列の初期化 7.配列の初期化 構文 配列 配列変数名[]={値1、値2、・・・}; 例 配列 配列変数名[]={値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.配列基本構文の理解 2.初期化 3.利用 4.応用(length、ソート) 5.代入 6.多次元配列 その①    型 識別子[]   配列変数名 = new 型名[]; その②    型 配列変数名[]  = new 型名[]; 2.初期化 3.利用 4.応用(length、ソート) 5.代入 6.多次元配列

簡単JAVA説明⑫ コレクション(リスト、セットとマップ) コレクション(リスト、セットと マップ) は、オブジ ェクトの集合を扱うための仕組みです。 次頁に一覧を与えます。 ※JDK1.4から1.5になりまして取り扱いがかわりました。 ★最後の頁の「Generic型について」も参照ください。

カテゴリ クラス List系 ArrayList LinkedList Vector Set系 HashSet TreeSet Map系 配列を扱います。 LinkedList 配列を扱います。挿入・削除が高速です。 Vector 配列を扱います。現在は推奨しません。(パフォーマンスが悪いため) Set系 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の使用 以下のメソッドが用意されています。 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"); 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"); Iterator it = set.iterator(); while (it.hasNext()) { System.out.println(it.next()); }

TreeSetの実行結果 AAA BBB CCC

簡単JAVA説明⑫ 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といいます。