可変長配列を利用する – ArrayListクラス
ArrayListは、内部的には配列を利用したリスト構造です。標準的な配列と異なる点は、サイズを後からでも変更できる点です。その性質上、インデックス値による値の読み書きは高速ですが、要素の挿入/削除は、配列サイズが大きくなるほど、また、操作位置が先頭に近くなるほど遅くなります。
ArrayListクラスで利用できるメソッドには、以下のようなものがあります。
| ArrayListクラスで利用できる主なメソッド | |
|---|---|
| メソッド | 概要 |
| add([int index,] E e) | 指定位置indexに要素eを挿入(index省略で末尾に挿入) |
| addFirst() | 最初に要素を挿入(Java 21以降) |
| addLast() | 最後に要素を挿入(Java 21以降) |
| clear() | リストからすべての要素を削除 |
| contains(Object e) | リストに要素oが含まれているかを判定 |
| get(int index) | index番目の要素を取得 |
| getFirst() | 最初の要素を取得(Java 21以降) |
| getLast() | 最後の要素を取得(Java 21以降) |
| indexOf(Object e) | 要素oが登場する最初のインデックス値を取得 |
| isEmpty() | リストが空か判定 |
| remove(int index|Object o) | 指定の要素を削除 |
| removeFirst() | 最初の要素を削除(Java 21以降) |
| removeLast() | 最後の要素を削除(Java 21以降) |
| set(int index, E e) | index番目の要素を設定 |
| int size() | リストに含まれる要素の数を取得 |
以下は、ArrayListに要素をセットし、その値を順に出力する例です。
CollList.java
- package com.example.mynavi.collection;
- import java.util.ArrayList;
- import java.util.List;
- public class CollList {
- public static void main(String args) {
- var list = new ArrayList<String>() {
- {
- add("Windows");
- add("Linux");
- add("macOS");
- }
- };
- for (String str : list) {
- System.out.println(str); // 結果:Windows、Linux、macOS
- }
- System.out.println("2番目の要素は" + list.get(1));
- // 結果:2番目の要素はLinux
- System.out.println(list.contains("Linux")); // 結果:true
- if (!list.isEmpty()) {
- System.out.println("要素数は" + list.size() + "個です。");
- // 結果:要素数は3個です。
- }
- list.remove(0);
- System.out.println(list); // 結果:[Linux, macOS]
- list.clear();
- System.out.println(list); // 結果:
- }
- }
ArrayListへの挿入に際しては、メモリーの再割り当てが発生する可能性がある点に注意してください。というのも、ArrayListはあらかじめ一定サイズの領域を準備していますが、これが不足していると、自動的にサイズを拡張しようとするのです。
しかし、サイズの拡張はオーバーヘッドの大きな処理なので、できるだけ避けるべきです。最初から必要なサイズが判っている場合には、インスタンス化に際してサイズを明示的に宣言しておくことをお勧めします。デフォルトのサイズは10です。
- var list = new ArrayList<String>(50);
- コレクションフレームワーク_目次
- コレクションフレームワーク
- コレクションを初期化する
- 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万部を超える。