0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

プログラミングド素人のデザイナーがJava入門してみた_その9

Posted at

前回までのあらすじ

プログラミングド素人のデザイナーが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クラス同様に複数のデータを扱う
  • 値の重複を許さない(同じ値を追加しても無効)
  • 値の順番を保持しない
    • n番目を取り出す、といったことはできない
  • 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パッケージからインポート
  • 値の順番を保持しない
    • n番目を取り出す、といったことはできない
  • javaのutilパッケージからインポートして使う
  • Mapインターフェースを実装している
  • ジェネリクス
    • 宣言時にkeyとvalueの型を指定する
  • 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順 追加された順

教科書

ドットインストールさまさま

@iwashi0830はこう思った

  • 配列はあとから要素の追加、削除できないの!?
  • クラスではなくインターフェースで変数を宣言することもできるのか
  • 配列っぽく扱うListクラスやSetクラスがジェネリクスを使っていて、なるほど、と思った
  • そろそろ序盤にやったことが頭から抜けてきている...
  • HashSetクラスが要素に序列をつけていないのはあえてなのだろうか...
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?