今回は、Java Silver試験に出題されることがあるコレクションフレームワーク、とりわけListインタフェースとArrayListクラスの使い方についての問題を解いていきましょう。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
names.remove(1);
for (String name : names) {
System.out.print(name + " ");
}
}
}
選択肢
- A. Alice Bob Charlie
- B. Alice Charlie
- C. Bob Charlie
- D. コンパイルエラー
答えと解説
回答を見る
答え
B. Alice Charlie
解説
解説のポイント:
- リストのインタフェースと実装
- インデックスによる要素削除
- for-eachループでの要素出力
基本説明:
Javaのコレクションフレームワークでは、Listはインタフェースであり、ArrayListはその実装です。リストとは順序があり、重複が許されるオブジェクトの集まりです。
ArrayListは可変長で要素の追加・削除が容易なコレクションとしてよく使用されます。
このプログラムではList<String> names = new ArrayList<>();
でリストが作成されています。
誤答理由:
Aを正解と考える人は、リストの要素を削除する部分を見落としているかもしれません。names.remove(1)
はインデックス1、すなわち2番目の要素である”Bob”をリストから削除します。
コンパイルエラーの選択肢Dを選ぶ理由は、コードの文法に対する誤解かもしれませんが、Java 7以降のダイヤモンド演算子<>
は正しく機能します。
つまずきポイント:
インデックスを指定して要素を削除する際、0から始まるインデックスによって何番目の要素が削除されるかを誤解しやすいです。例えば、0は最初の要素、1はその次を指します。
また、コレクションを操作するときのメソッドの振る舞いについての理解が不足していると、意図しない動作に結びつきがちです。
発展知識:
ArrayListは配列と異なり、サイズを動的に変更できます。配列のようにあらかじめ固定サイズを決める必要がないため、要素の追加・削除が頻繁に行われる場合に適しています。
また、JavaのコレクションフレームワークにはLinkedList
やVector
など他のリスト実装もあり、それぞれ特徴があります。用途に応じて使い分けることで、より効率的にデータを扱うことができます。