pi-10. Javaにおけるコレクショ
ンとジェネリクス:データ型の
柔軟な管理と型安全性の実現
1
金子邦彦
Java マスター講座:基礎から応用まで)
URL: https://www.kkaneko.jp/pro/pi/index.html
Javaのコレクション(ArrayListHashMapなど)の
使い方と、ジェネリクスによる型安全なプログラミング
【学習内容の構成】
コレクション:オブジェクトの集まりを1つのオブ
ジェクトとして扱うJavaの標準機能
基本データ型とラッパクラス:コレクションで基本
データ型を扱うための対応関係int→Integer等)
ジェネリクス:クラス名の後に型変数を指定し、格納
するオブジェクトの型を制限する機能
前提:Javaの基本文法、クラスとオブジェクトの概念、
クラス階層の理解
意義:型安全なコレクション操作による堅牢なプロ
ラム設計
2
Java Tutor の起動
ウェブブラウザを起動する
Java Tutor を使いたいので,次の URL を開く
https://pythontutor.com/java.html
Java」をクリック 編集画面が開く
3
Java Tutor でのプログラム実行手
4
(1)Visualize Execution」をク
リックして実行画面に切り替える
(2)Last」をクリック.
(3) 実行結果を確認する.
(4)Edit this code」をク
リックして編集画面に戻る
Java Tutor 使用上の注意点①
実行画面で,次のような赤の表示が出ることがある
無視してよい
過去の文法ミスに関する確認表示
邪魔なときは「Close
5
Java Tutor 使用上の注意点②
please wait ... executing」のとき,10秒ほど待つ
混雑しているときは, Server Busy・・・」
というメッセージが出ることがある.
混雑している.少し(数秒から数十秒)待と自
動で表示が変わる(変わらない場合には,操作を
もう一度行ってみる)
6
10-1. Java のコレクション
7
コレクションとは
コレクションは、オブジェクトの集まりを1つの
オブジェクトとして扱いたいときに使う
Java の標準機能として,ArrayListHashMap
など,コレクションを扱うためのクラスある
8
15 32 23
順序のあるデータ
要素の削除挿入によりサイズが増減する
リスト (List) とは
9
add メソッドは、要素の挿入
10
演習
資料:14 15
【トピックス】
リスト
11
12
拡張 for 文で
リストの要素をたどる
空のリストの
組み立て
add メソッドは
要素の挿入
Java Tutor のエディタで次のプログラムを入れ
実行し,結果を確認する
あとで使うので、プログラムを消さないこと
13
15, 8, 6, 32, 23
が表示される
Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
Edit this code」をクリックすると,エディタの画面に戻る
Java でのコレクションの使い
型変数を使う(コレクションに入れるオブジェク
クラスを示す)
異なるクラスオブジェクトコレクションで扱
いたいときは、共通のスーパークラスを、型変数
に指定
14
演習
資料:18 19
トピックス
リスト
型変数
15
16
Java Tutor のエディタで次のプログラムを入れ
実行し,結果を確認する
あとで使うので、プログラムを消さないこと
17
100, 200, 300,
400, 500 が表示
される
Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
Edit this code」をクリックすると,エディタの画面に戻る
クラス階層のイメージ
String, Integer 共通するスーパークラス Object
18
Boolean
Character
Byte
Short
Java の標準機能のクラスの多くは、Object サブクラス
Integer
Long
Float
Double
String
Object
演習
資料:22 23
トピックス
リスト
型変数
クラス階層
19
20
Java Tutor のエディタで次のプログラムを入れ
実行し,結果を確認する
あとで使うので、プログラムを消さないこと
21
100, hello が表
示される
Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
Edit this code」をクリックすると,エディタの画面に戻る
22
型変数は、毎回「Object」と書けば大丈夫ですか?
いいえ。
・プログラムが分かりにくくなる
・不便になる
型変数には、なるべく具体的なクラス名を書いた方がよいです.
10-2. Java の基本データ型
23
基本データ
基本データ配列
クラスに属するオブジェクト:
Javaの標準機能のクラスは,
String, ArrayList, HashMap クラスなど多種
Java のデータの種類
24
データの種類
基本データ型
サイズ
整数
byte
8 bit
short
16 bit
int
32 bit
long
64 bit
浮動小数
float
32 bit
double
64 bit
文字
char
16 bit
true/false
boolean
Java のコレクションは、オブジェクトのコレク
ション
Java では「基本データ型コレクション」という
ものはない
ArrayList<int> などはない
25
データの種類
基本データ型
サイズ
整数
byte
8 bit
short
16 bit
int
32 bit
long
64 bit
浮動小数
float
32 bit
double
64 bit
文字
char
16 bit
true/false
boolean
Java のコレクションは、オブジェクトのコレク
ション
26
これは OK
これは動かない
Java のラッパクラス
基本データ型対応したクラス
27
ラッパクラス 基本データ型
------------------------------
Boolean boolean
Character char
Byte byte
Short short
Integer int
Long long
Float float
Double double
Java のコレクションは、オブジェクトのコ
レクション
Java では「基本データ型コレクション」という
ものはない
ArrayList<int> はない
ラッパクラスコレクション」で代用
ArrayList<Integer> で代用
28
10-3. Java のジェネリクス
29
Java のジェネリクスとは
クラス名の後に「<クラス名>」を指定して、種々
の制限などができる機能
ArrayList は,コレクションのクラス.
ArrayList<Integer> は,m には整数しか入れない
という制限
30
Java のオブジェクトの生成
次の2つのオブジェクトを生成する Java プログラム
このとき,次のクラスを使うことにする
31
a 1 2
b "xx" "yy"
s e
クラス名 Pair
属性 s, e
さまざまなクラスのオブジェクトが入る.
s e のクラスは同じに制限したい.
クラス定義で「class Pair<T>」のような書き
方ができる.
このとき、コンストラクタで「new
Pair<Integer>」のような書き方ができる.
32
演習
資料:36 37
【トピックス】
ジェネリクス
33
34
表示を確認
Java Tutor のエディタで次のプログラムを入れ,
実行し,結果を確認する
Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
Edit this code」をクリックすると,エディタの画面に戻る
35
表示を確認
Java Tutor のエディタで次のプログラムを入れ,
実行し,結果を確認する
Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
Edit this code」をクリックすると,エディタの画面に戻る
全体まとめ
Java の基本データ型のそれぞれに,ラッパクラス
がある.
Java では「基本データ型コレクション」という
ものはない
ArrayList<int> はない
ラッパクラスコレクション」で代用
ArrayList<Integer> で代用
Java の標準機能として,ArrayListHashMap
など,コレクションを扱うためのクラスある.
Java コレクションのクラスの基礎は,ジェネリ
クスである
36
関連ページ
Java プログラミング入門
GDB online を使用
https://www.kkaneko.jp/pro/ji/index.html
Java の基本
Java Tutor, GDB online を使用
https://www.kkaneko.jp/pro/pi/index.html
Java プログラム例
https://www.kkaneko.jp/pro/java/index.html
37
ソースコード 10-1
import java.util.ArrayList;
import java.util.Iterator;
public class YourClassNameHere {
public static void main(String[] args) {
ArrayList<String> m = new ArrayList<String>();
m.add("15");
m.add("8");
m.add("6");
m.add("32");
m.add("23");
for(String s : m) {
System.out.println(s);
}
}
}
38
ソースコード 10-1
import java.util.ArrayList;
import java.util.Iterator;
public class YourClassNameHere {
public static void main(String[] args) {
ArrayList<Integer> m = new ArrayList<Integer>();
m.add(100);
m.add(200);
m.add(300);
m.add(400);
m.add(500);
for(Integer s : m) {
System.out.println(s);
}
}
}
39
ソースコード 10-3
class Pair<T> {
T s;
T e;
public Pair(T s, T e) {
this.s = s;
this.e = e;
}
public void print() {
System.out.println(s);
System.out.println(e);
}
}
public class YourClassNameHere {
public static void main(String[] args) {
Pair a = new Pair<Integer>(1, 2);
Pair b = new Pair<String>("xx", "yy");
a.print();
b.print();
}
}
40