配列とコレクション
配列
配列は、型 []
で宣言する。最初に決めた要素は変更できない。
型 [] 変数名 = new 型[要素数];
型 [] 変数名 = { 初期化データリスト};
コレクションは、増減可能な複数のデータを一つにまとめる機能の総称でList、Set、Queue、Dequeの4種類存在する。
ArrayList
ArrayList
クラスは java.util
パッケージに含まれ、
利用する場合はjava.util.ArrayList
をまずインポートする。
配列と異なり可変長で、初期要素数を超過しても、要素を追加できる。
ArrayList<型パラメータ> 変数名 = new ArrayList<>();
型パラメータには基本データ型は指定できず、それぞれの基本データ型に対応したラッパークラスを使用する。
また、<>で囲まれたデータ型名をクラスやメソッドに付けることで、様々な型に対応する汎用的なクラスやメソッドを設計する機能をジェネリクスという。
また、宣言をListでインスタンス生成をArrayListで行う場合もある。この場合、ArrayListにしかないメソッドは使えないが、LinkedListなど別のコレクションに変更したい時に手を加えなくても良い。
List<型パラメータ> 変数名 = new ArrayList<>();
- 要素を追加
add
メソッドを用いる。
変数名.add(index,element)
- 要素を置き換え
set
メソッドを用いる。
変数名.set(index,element)
- 要素を削除
remove
メソッドを用いる。
変数名.remove(index)
- 要素の数を取得
size
メソッドを用いる。
変数名.size()
- 格納されている要素を取り出す
get
メソッドを用いる。
変数名.get(index)
package Training;
import java.util.*;
public class Main {
public static void main(String[] args) {
int counter = 0; // カウンターの定義
ArrayList<Integer> A = new ArrayList<>(); // 標準入力を格納するArrayList
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 数字の個数を標準入力から取得
// for文入力された数字を一つずつArrayListに格納
for (int i = 0; i < N; i++) {
int a = sc.nextInt();
A.add(i, a);
}
// 操作が行える限り繰り返す
while (true) {
boolean exsist_odd = false; // 数字が全て偶数か判定するフラグ
for (int i = 0; i < N; i++) {
if (A.get(i) % 2 != 0) {
exsist_odd = true; // 奇数が存在したらフラグをtrueに
}
}
if (exsist_odd) {
break; // フラグがtrueならwhileから抜ける
}
// 操作が行えるなら要素を2で割って置き換える
for (int i = 0; i < N; i++) {
int a = A.get(i) / 2;
A.set(i, a);
}
counter++; // 操作回数をインクリメント
}
System.out.println(counter);
}
}
HashSet
HashSet
クラスはjava.util
パッケージに含まれ、利用する場合はjava.util.HashSet
をまずインポートする。
要素の重複を許さず、順番も持たない。
pythonでいうところの集合。
HashSet<型パラメータ> 変数名 = new HashSet<>();
- 要素の有無を検証
contain
メソッドを用いる。TrueまたはFalseが返る。
変数名.contain(element)
HashMap
pythonでいうところの辞書。
HashMap<keyの型,valueの型> 変数名 = new HashMap<>();
- keyとvalueのペアを追加
put
メソッドを用いる。
変数名.put(key,value)
- 指定したkeyが存在しない場合だけペアを追加する
putIfAbsent
メソッドを用いる。
変数名.putIfAbsent(key,value)
- keyとvalueのペアを削除
remove
メソッドを用いる。
変数名.remove(key)
- 指定したkeyのvalueを取得
get
メソッドを用いる。
変数名.get(key)
- keyを取得
keySet
メソッドを用いる。
変数名.keySet();
Iterator
Iteratorインターフェースは、List, Set, Map のようなコレクションに対してデータを取り出す役割を担う。
java.util.Iterator
をインポートして使う。
Iterator<データ型> iterator = 配列.iterator();
hasNext
:配列からデータを繰り返し取り出す処理をする際に、次のデータが存在すればtrueを返す。
next
:繰り返し処理の際に、次のデータを取り出す。