JAVA入門

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といいます。