匿名クラスと初期化ブロックの構文を利用することで、インスタンス化に際してまとめて配下の要素をセットできます。
CollInit.java
package com.example.mynavi.collection;
import java.util.ArrayList;
import java.util.List;
public class CollInit {
public static void main(String[] args) {
var list = new ArrayList<String>() {
{
add("Windows");
add("Linux");
add("macOS");
}
};
System.out.println(list); // 結果:[Windows, Linux, macOS]
}
}
外枠の{…}が匿名クラスを表す定義ブロック、内側の{…}が初期化ブロックを意味します。匿名クラスの配下ではコンストラクターを指定することはできませんので、初期化ブロックでaddメソッドを呼び出し、オブジェクトを追加しています。
ダイアモンド構文
Java 7以降では、ダイヤモンド構文が導入され、右辺の要素型(<...>の中身)を省略できるようになりました(左辺で要素型は明らかなためです)。よって、以下の文は同じ意味です。
- List<String> list = new ArrayList<String>();
- List<String> list = new ArrayList<>();
冗長な構文をあえて利用する意味はありませんので、Java 7以降の環境ではダイヤモンド構文を積極的に利用していきましょう。
*)ただし、Java 10以降であれば、var命令を使って、「var list = new ArrayList<String>()」のように表しても構いません。
変更不能なコレクションの初期化
内容の変更を想定していないのであれば、ofメソッドを利用することで、より簡単な初期化も可能です。
CollOf.java
package com.example.mynavi.collection;
import java.util.List;
public class CollOf {
public static void main(String[] args) {
var list = List.of("Windows", "Linux", "macOS");
System.out.println(list); // 結果:[Windows, Linux, macOS]
}
}
上ではリストを例にしていますが、セット、マップでも同様です。
- var map = Map.of(
- "パソコン", "personal computer",
- "エアコン", "air conditioner",
- "リモコン", "remote control"
- );
また、ofメソッドで作成したリストを(たとえば)ArrayListコンストラクターに渡すことで、いわゆる変更可能なリストを生成することも可能です。
- var data = new ArrayList<String>(List.of("Windows", "Linux", "macOS"));
- コレクションフレームワーク_目次
- コレクションフレームワーク
- コレクションを初期化する
- synchronizedList/synchronizedMap/synchronizedSetメソッド
- ArrayListクラス
- asListメソッド
- toArrayメソッド
- LinkedList
- HashMap
- TreeMap
- NavigableMap
- HashSet
- ArrayDeque
監修
山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。