JavaにおけるArrayListとVectorの違いを徹底解説
ArrayListとVectorは、どちらもJavaのListインターフェースを実装したクラスです。両者とも要素の挿入順序を保持するという共通点がありますが、内部動作や設計思想にはいくつかの重要な違いがあります。
ここでは、ArrayListとVectorの主な相違点を表形式で整理して紹介します。
| 項番 | 比較ポイント | ArrayList | Vector |
|---|---|---|---|
| 1 | 同期化 | 非同期(スレッドセーフではない) | 同期化されている(スレッドセーフ) |
| 2 | 容量の拡張 | 容量を超える要素が追加されると、現在のサイズの50%ずつ拡張される | 容量を超える要素が追加されると、現在のサイズの100%ずつ拡張される |
| 3 | レガシー | レガシークラスではない(Java 1.2で導入) | レガシークラスである(JDK 1.0から存在) |
| 4 | 速度 | 非同期のため高速 | 同期処理のオーバーヘッドにより比較的低速 |
| 5 | 反復処理 | Iteratorインターフェースで要素を走査する | IteratorとEnumeratorの両方を使って要素を走査できる |
ArrayListとVectorの使用例
JavaTester.java
import java.util.ArrayList;
import java.util.Vector;
import java.util.List;
public class JavaTester {
public static void main(String args[]) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
List<String> list1 = new Vector<>();
list1.add("A");
list1.add("B");
list1.add("C");
list1.add("D");
System.out.println(list);
System.out.println(list1);
}
}
実行結果
[A, B, C, D] [A, B, C, D]
このように、基本的な使い方はほぼ同じですが、マルチスレッド環境での安全性やパフォーマンスの観点で使い分けが必要です。一般的には、シングルスレッド環境では高速なArrayListが推奨されます。マルチスレッド環境で同期化されたリストが必要な場合は、Collections.synchronizedList()メソッドやjava.util.concurrentパッケージのCopyOnWriteArrayListなど、より現代的な代替手段を検討するとよいでしょう。
-
【Java】CollectionインターフェースとCollectionsクラスの違いとは?違いを徹底解説
はじめにJavaのコレクションフレームワークを学んでいると、「Collection」と「Collections」という名前が似ている2つの存在に出会います。名前はほぼ同じですが、その役割はまったく異なります。この記事では、両者の違いをわかりやすく解説します。CollectionとCollectionsの主な違いCollectionはJavaにおけるインターフェースです。一方、Collectionsはユーティリティクラスであり、コレクションを操作するための便利な静的メソッドを提供します。Set、List、QueueなどはCollectionインターフェースのサブインターフェースです。また、Map
-
Javaのwait()メソッドとsleep()メソッドの違いを徹底解説
Javaのマルチスレッドプログラミングでは、sleep()メソッドとwait()メソッドのどちらもスレッドの処理を一時停止させるために使用されますが、両者にはいくつかの重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。 sleep()メソッドとwait()メソッドの主な違い 1. メソッドの種類と影響範囲 sleep()メソッドはThreadクラスのstatic(静的)メソッドであり、呼び出すと現在実行中のスレッドを「実行不可能(Non-Runnable)」状態にします。 一方、wait()メソッドはインスタンスメソッドであり、スレッドオブジェクトではなく対象の