Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 1 year has passed since last update.

配列とコレクション

Last updated at Posted at 2022-04-21

配列とコレクション

配列

配列は、型 []で宣言する。最初に決めた要素は変更できない。

 [] 変数名 = 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)

例 Atcoder Beginners Selection 問3

Main.java
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 :繰り返し処理の際に、次のデータを取り出す。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?