JavaにおけるListとSetの違いを徹底解説
ListとSetは、どちらもJavaのCollectionフレームワークに属するインターフェースであり、双方ともCollectionインターフェースを継承しています。これらは、複数のオブジェクトをひとつのまとまった単位として格納・管理するために使用されます。
JDK 1.2以前のJavaでは、オブジェクトをグループ化するために配列(Array)、Vector、Hashtableなどが利用されていました。JDK 1.2でCollectionフレームワークが導入されて以降、ListやSetといったインターフェースがオブジェクト管理の標準的な手段となっています。
本記事では、ListとSetの主な違いを比較表とサンプルコードを通してわかりやすく解説します。
ListとSetの違い 比較表
| 番号 | 比較項目 | List | Set |
|---|---|---|---|
| 1 | 位置アクセス | コレクション内の要素へ、インデックスによる位置アクセスが可能 | 位置による要素へのアクセスは不可 |
| 2 | 主な実装クラス | ArrayList、LinkedList、Vector、Stack など | HashSet、LinkedHashSet など |
| 3 | 重複要素 | 重複した要素を格納できる | 重複した要素は格納できない |
| 4 | 順序 | 要素の挿入順序を保持する | 基本的に順序は保持されない |
| 5 | null要素 | 複数のnullを格納できる | nullは1つだけ格納できる |
Listのサンプルコード
以下は、ArrayListを使ってListに文字列を追加する例です。同じ「BMW」という値を2回追加していますが、Listは重複を許可するため、両方の要素がそのまま格納されます。
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
public class ListExample {
public static void main(String[] args) {
List<String> al = new ArrayList<String>();
al.add("BMW");
al.add("Audi");
al.add("BMW");
System.out.println("List Elements: ");
System.out.print(al);
}
}実行結果
List Elements: [BMW, Audi, BMW]
このように、Listでは同じ要素が複数回出力されており、重複が許容されていることが確認できます。
Setのサンプルコード
次に、HashSetを使ってSetに整数を追加する例を示します。Setは重複を許さず、また挿入順序を保証しない点に注意してください。
import java.util.Set;
import java.util.HashSet;
import java.util.TreeSet;
public class SetExample {
public static void main(String args[]) {
int count[] = {2, 4, 3, 5};
Set<Integer> hset = new HashSet<Integer>();
try{
for(int i = 0; i<4; i++){
hset.add(count[i]);
}
System.out.println(hset);
}
catch(Exception e){
e.printStackTrace();
}
}
}実行結果
[2, 4, 3, 5]
HashSetは順序を保証しないため、出力順序は実装や要素のハッシュ値によって変わる可能性があります。挿入順序を保持したい場合はLinkedHashSet、要素をソートした状態で管理したい場合はTreeSetの利用を検討しましょう。
まとめ
Listは「順序を保持し、重複を許容する」コレクション、Setは「重複を許さない」コレクションです。要素の順番や重複が重要な場面ではListを、要素の一意性が求められる場面ではSetを選ぶとよいでしょう。それぞれの特性を理解して、目的に応じた適切なコレクションを使い分けることが、効率的でバグの少ないJavaプログラムの実装につながります。
-
JavaでのArrayListとHashSetの違いを徹底解説!使い分けのポイントも紹介
HashSetとArrayListは、どちらもJavaコレクションフレームワークにおいて最も重要なクラスの一つです。それぞれ特徴が異なるため、用途に応じた適切な使い分けが求められます。本記事では、ArrayListとHashSetの主な違いを6つの観点から比較し、実際のサンプルコードとともにわかりやすく解説します。ArrayListとHashSetの違い一覧No.項目ArrayListHashSet1実装インターフェースListインターフェースを実装しています。Setインターフェースを実装しています。2内部構造内部的には配列(動的配列)を使って実装されています。内部的にはHashMapを使って
-
JavaのIteratorとListIteratorの違いを徹底解説!特徴と使い分けのポイント
IteratorとListIteratorとは Javaでは、コレクションに格納された要素を1つずつ順番に取り出して処理するために、IteratorとListIteratorという2つのインターフェースが提供されています。 両者は内部実装こそ異なるものの、目的はどちらも「コレクション内のデータを順次走査する」ことです。しかし、利用できるコレクションの種類や、走査中に行える操作には大きな違いがあります。 IteratorとListIteratorの主な違い一覧 No.比較項目IteratorListIterator 1適用範囲List、Set、Queueなど、あらゆる種類のコレクションに対し