今回は、
問題:集合とJava言語に関する以下の問いに答えてください。
明らかに偶数は2、
ArrayListを用いると、
(1)
解説
(1)10より小さな自然数のうち、偶数を整数型の配列とArrayListのオブジェクトにセットするプログラムを作ってください。結果が得られたら、偶数の個数を表示し、その後全ての偶数を表示しましょう。
先ずは配列で目的の処理を行ってみます。
01: //filename : GusuNoHairetsu.java
02: //10 より小さい自然数のうち、偶数を配列a にセットする。
03:
04: class GusuNoHairetsu {
05: public static void main(String[] args) {
06: //添え字が偶数なら1、奇数なら0 をセット。
07: int temp[] = new int[10]; //探索リスト
08: int even = 0; //偶数の数をカウント
09: for ( int i = 1 ; i
10: if (i%2 == 0) {
11: temp[i] = 1;
12: ++even;
13: } else temp[i] = 0;
14: }
15: System.out.println("偶数は"+even+"個");
16: int a[] = new int[even];//偶数の個数分配列を用意
17: int j = 0;
18: for (int i = 0; i
19: if (temp[i]==1) {
20: a[j] = i;
21: ++j;
22: }
23: }
24: for( int i = 0;i<10 ; ++i){
25: System.out.println("a["+i+"] = "+ a[i]);
26: }// end of main
27: }// end of class GusuNoHairetsu
解説は後回しにして、
01: //filename : GusuNoArrayList.java
02: //10 より小さい自然数のうち、偶数をArrayList A にセットする。
03:
04: import java.util.ArrayList;
05:
06: class GusuNoArrayList {
07: public static void main(String[] args) {
08: ArrayList A = new ArrayList();
09: for ( int i = 1 ; i
10: if ( i%2 == 0 ) A.add(i);
11: System.out.println("偶数は" + A.size() + "個");
12: for ( int i = 0 ; i
13: System.out.println("A("+i+") = " + A.get(i));
14: }// end of main()
15: }// end of class GusuNoArrayList
実質半分以下に行数が減りました。キーボードを打つ数が減ります。
どちらが良いかというより、
- 一時的なデータの保存場所として、
7行目の配列tempが使われる。 - 偶数の数をカウントするために変数evenが使われる。
- 繰り返しが3回行われる。
ArrayListクラスを用いることで、
配列を用いた場合
一方、
メモリの使用量、
(2)10より小さな自然数の集合を全体集合とし、(1)で作成した偶数の集合の補集合をとるプログラムを、配列の場合とArrayListの場合それぞれで作ってください。
先ず、
01: //filename : HairetsuDeHoshugo.java
02: //10 より小さい自然数を全体集合を表す配列u にセットし、
03: //偶数の集合を表す配列even との補集合をとる。
04: //補集合は配列complementary にセットする。
05:
06: class HairetsuDeHoshugo {
07: public static void main(String[] args) {
08: int u[] = {1,2,3,4,5,6,7,8,9}; //全体集合
09: int even[] = {2,4,6,8}; //偶数の集合
10: int count = 0; //補集合の要素数
11: //int complementary[] は、補集合の要素数が確定したら宣言
12: int temp[] = new int[10]; //補集合の要素を一時的に保管
13: boolean found = false; //同じ要素を見つけたかどうか
14:
15: for ( int i_u = 0 ; i_u
16: for ( int i_e = 0 ; i_e
17: if (u[i_u] == even[i_e]) {
18: found = true;
19: break;
20: }
21: }
22: if ( found == false ) {
23: temp[count] = u[i_u];
24: ++count;
25: }
26: found = false;
27: }
28:
29: System.out.println("補集合の要素は"+count+"個");
30:
31: int complementary[] = new int[count];
32: for (int i = 0 ; i
33: complementary[i] = temp[i];
34: System.out.println("complementary["+i+"] = "+ complementary[i]);
35: }
36: }// end of main
37: }// end of class HairetsuDeHoshugo
次にArrayList を用いた場合を示します。
01: //filename : ArrayListDeHoshugo.java
02: //10 より小さい自然数を全体集合を表すArrayList U にセットし、
03: //偶数の集合を表すArrayList Even との補集合をとる。
04: //補集合はArrayList Complementary にセットする。
05:
06: import java.util.ArrayList;
07:
08: class ArrayListDeHoshugo {
09: public static void main(String[] args) {
10: //初期化
11: ArrayList U = new ArrayList(); //全体集合
12: int u[] = {1,2,3,4,5,6,7,8,9};
13: for (int i = 0 ; i
14: ArrayList Even = new ArrayList();//偶数の集合
15: int even[] = {2,4,6,8};
16: for (int i = 0 ; i
17: ArrayList Complementary = new ArrayList();//補集合
18:
19: //補集合をとる
20: for (int i = 0 ; i
21: if ( Even.contains( U.get(i) ) == false )
22: Complementary.add( U.get(i) );
23: //結果の表示
24: System.out.println("補集合の要素は"+Complementary.size()+"個");
25: for (int i = 0 ; i
26: System.out.println("Complementary("+i+") = "+ Complementary.get(i));
27: }// end of main()
28: }// end of class ArrayListDeHoshugo
トータルで10行しか違いませんが、
せっかくArrayListクラスを使ったのですから、
コード例を次に示しますので参考にしてください。GusuNoArrayList.
01: //filename : GusuNoArrayListDeIterator.java
02: //10 より小さい自然数のうち、偶数をArrayList A にセットする。
03:
04: import java.util.*;
05:
06: class GusuNoArrayListDeIterator {
07: public static void main(String[] args) {
08: ArrayList A = new ArrayList();
09: for ( int i = 1 ; i
10: if ( i%2 == 0 ) A.add(i);
11: System.out.println("偶数は" + A.size() + "個");
12: for ( Iterator I = A.iterator() ; I.hasNext() ; )
13: System.out.println( "A() = "+ I.next() );
14: }// end of main()
15: }// end of class GusuNoArrayListDeIterator
4行目でimportするクラスの末尾が*(アスタリスク)になったのは、
import java.util.ArrayList;
import java.util.List;
ワイルドカードであるアスタリスクを用いて一行で済ませたのです。