前回までのあらすじ
プログラミングド素人のデザイナーがJava入門してみた_その8
Mathクラス,Randomクラス
Mathクラス
Math.ceil() |
Math.floor() |
Math.round() |
Math.PI |
Math.random() |
切り上げ |
切り捨て |
四捨五入 |
円周率 |
乱数(Randomクラスの方がよい) |
double d = 123.456;
System.out.println(Math.ceil(d));//小数点以下を切り上げ
System.out.println(Math.floor(d));//小数点以下を切り捨て
System.out.println(Math.round(d));//四捨五入
System.out.println(Math.PI);//円周率
Randomクラス
- Randomクラスはjavaのutilパッケージ内にあるため、使うにはインポートする必要がある
- Randomクラスのインスタンスを作らないと使えないメソッド(クラスメソッドではない?)
r.nextDouble() |
r.nextInt(n) |
r.nextBoolean() |
0 ~ 1未満の浮動小数点数 |
0 ~ n未満の整数 |
true or false
|
import java.util.Random; //Randomクラスをimport
~中略~
Random r = new Random();//インスタンス化
System.out.println(r.nextDouble());//0 ~ 1未満の浮動小数点数
System.out.println(r.nextInt(100));//0 ~ 100(引数の値)未満の整数
System.out.println(r.nextBoolean());//true or false
##ArrayListクラスを使う
- 配列のようなものだが、あとから要素を追加,削除することができる
- 使うにはjavaのutilパッケージからのインポートが必要
- ArrayListはジェネリクス(引数の値を指定して使う)を使った型
- Listインターフェースを実装したクラス
- ArrayListだけが持つメソッドを使う機会はあまりないので、ArrayListが実装しているListインターフェースで宣言することもある
al.add(n) |
al.set(x,y) |
al.remove(n) |
al.seze() |
ArrayListの要素にnを追加する |
x番目の項目にyを追加する |
n番目の項目削除する |
要素の数を取得 |
import java.util.*;//utilパッケージ内のクラスを全てインポート
// ArrayList<Integer> sales = new AllayList<>();
// 今回はListクラスで宣言
List<Integer> sales = new ArrayList<>();
sales.add(10);
sales.add(20);
sales.add(30);
sales.set(0,100);
sales.remove(1);
// for(int i = 0; i < sales.size(); i++){
// System.out.println(sales.get(i));
// }
for(Integer sale : sales){
System.out.println(sale);
}
- ArrayListクラスと同様にListクラスを実装したLinkedListクラスがある
- できることは同様だが、下記のような違いがある
ArrayListクラス |
LinkedListクラス |
《検索速度》:速い、《要素の追加/削除》:遅い |
《検索速度》:遅い、《要素の追加/削除》:速い |
HashSetクラス
- ArrayListクラス同様に複数のデータを扱う
- 値の重複を許さない(同じ値を追加しても無効)
- 値の順番を保持しない
- javaのutilパッケージからインポートして使う
- Setインターフェースを実装している
- ジェネリクス
- Setインターフェースで宣言することが多い
import java.util.*;//utilパッケージからインポート
~中略~
Set<Integer> sales = new HashSet<>();
sales.add(10);
sales.add(20);
sales.add(30);
sales.add(30);//30は重複した値なので無効
for(Integer sale : sales){
System.out.println(sale);//順不同で出力(ランダムというわけではなさそう)
}
同じくSetインターフェースを実装したものに、TreeSet,LinkedHashSetがある
HashSet |
TreeSet |
LinkedHashSet |
値が順不定 |
値順にソート |
追加順を保持 |
##HashMap
- 連想配列
- keyとvalueで値を管理
- utilパッケージからインポート
- 値の順番を保持しない
- javaのutilパッケージからインポートして使う
- Mapインターフェースを実装している
- ジェネリクス
- Mapインターフェースで宣言することが多い
m.put(key,value) |
m.remove(key) |
m.size() |
keyとvalueが対になった要素を追加 |
keyで指定した要素を削除 |
要素数を取得 |
import java.util.*;
~中略~
//インスタンス化
Map<String, Integer> sales = new HashMap<>();//ジェネリクス。keyとvalueの型を指定
sales.put("suzuki",100);//要素を追加
sales.put("satou",50);
sales.put("tanaka",70);
System.out.println(sales.get("tanaka"));//keyで値を呼ぶ
System.out.println(sales.size());//要素数
//要素を全て取り出す
for(Map.Entry<String, Integer> sale : sales.entrySet()){//saleにkeyとvalueを格納するループ?
System.out.println(sale.getKey() + ":" + sale.getValue());//saleに格納されたkeyとvalueを表示
}
- Mapインターフェースを実装したTreeMap,LinkedHashMapがある
HashMap |
TreeMap |
LinkedHashMap |
順不定 |
key順 |
追加された順 |
教科書
ドットインストールさまさま
- 配列はあとから要素の追加、削除できないの!?
- クラスではなくインターフェースで変数を宣言することもできるのか
- 配列っぽく扱うListクラスやSetクラスがジェネリクスを使っていて、なるほど、と思った
- そろそろ序盤にやったことが頭から抜けてきている...
- HashSetクラスが要素に序列をつけていないのはあえてなのだろうか...