Javaで配列からArrayListを作成する
Javaでは、配列とArrayListは異なるデータ構造です。配列は固定長のデータの集合であり、一方、ArrayListは動的にサイズを変更できるデータの集合です。このため、配列のデータをArrayListに変換することが必要になることがあります。
方法
配列からArrayListを作成する一般的な方法は次の3つです。
方法1: Arrays.asList()
メソッドを使用する
最も簡単な方法です。しかし、返されるリストは固定サイズで、要素を追加または削除することはできません。
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
String[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = Arrays.asList(fruits);
// fruitList.add("grape"); // この行はエラーになります
}
}
方法2: Collections.addAll()
メソッドを使用する
この方法は、新しいArrayListを作成し、配列のすべての要素をそのリストに追加します。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] arg s) {
String[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = new ArrayList<>();
Collections.addAll(fruitList, fruits);
}
}
方法3: ループを使用して要素を追加する
この方法は、より柔軟ですが、コードが冗長になります。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
String[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = new ArrayList<>();
for (String fruit : fruits) {
fruitList.add(fruit);
}
}
}
要点
Arrays.asList()
は簡単ですが、返されるリストは固定サイズです。Collections.addAll()
は新しいArrayListを作成し、すべての要素を追加します。- ループを使用すると柔軟ですが、コードが長くなります。
- ArrayListは配列よりも柔軟で、多くの場合、ArrayListを使用することが推奨されます。
備考
- プリミティブ型(int、doubleなど)の配列をArrayListに変換する場合、自動ボクシングを利用して対応するラッパークラス(Integer、Doubleなど)のArrayListを作成する必要があります。
- ArrayListのサイズ変更は可能ですが、頻繁なサイズ変更はパフォーマンスに影響を与える可能性があります。
コード解説: 配列からArrayListへ変換
コード例1: Arrays.asList()
を使用
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
String[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = Arrays.asList(fruits);
// fruitList.add("grape"); // エラー: このリストは固定サイズ
}
}
- 解説:
import java.util.Arrays;
とimport java.util.List;
で必要なクラスをインポートします。String[] fruits = {"apple", "banana", "orange"};
で文字列の配列fruits
を作成します。List<String> fruitList = Arrays.asList(fruits);
で配列fruits
からList
インターフェースを実装するfruitList
を作成します。しかし、この方法で作成されたリストは固定サイズで、要素を追加できません。fruitList.add("grape");
はエラーになります。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] arg s) {
String[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = new ArrayList<>();
Collections.addAll(fruitList, fruits);
}
}
- 解説:
import java.util.ArrayList;
,import java.util.Arrays;
,import java.util.Collections;
,import java.util.List;
で必要なクラスをインポートします。List<String> fruitList = new ArrayList<>();
で空のArrayList
を作成します。Collections.addAll(fruitList, fruits);
で配列fruits
のすべての要素をfruitList
に追加します。
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
String[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = new ArrayList<>();
for (String fruit : fruits) {
fruitList.add(fruit);
}
}
}
- 解説:
for (String fruit : fruits)
で配列fruits
の各要素をfruit
に代入し、ループを回します。fruitList.add(fruit);
で各要素をfruitList
に追加します。
注意:
Arrays.asList()
で作成されたリストは固定サイズなので、要素の追加や削除はできません。Collections.addAll()
やループを使った方法は、可変サイズのArrayList
を作成できます。
配列からArrayListへの変換:代替方法
これまで、Arrays.asList()
, Collections.addAll()
, ループによる3つの方法を紹介しました。これらに加えて、Java 8以降のStream APIを利用した方法も検討できます。
Stream APIを利用した方法
Stream APIは、データの処理を宣言的に表現できる機能を提供します。配列からArrayListへの変換にも利用可能です。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
St ring[] fruits = {"apple", "banana", "orange"};
List<String> fruitList = Arrays.stream(fruits)
.collect(Collectors.toCollection(ArrayList::new));
}
}
- 解説:
Arrays.stream(fruits)
で配列fruits
をストリームに変換します。collect(Collectors.toCollection(ArrayList::new))
でストリームの要素を新しいArrayList
に集約します。
性能比較
一般的に、Arrays.asList()
は最も高速ですが、返されるリストは固定サイズです。Collections.addAll()
とループによる方法は、パフォーマンスに大きな差はありません。Stream APIは、他の方法と比較して若干オーバーヘッドがありますが、コードの可読性や関数型プログラミングのスタイルに適している場合に使用できます。
配列からArrayListへの変換には複数の方法がありますが、使用する状況に応じて適切な方法を選択することが重要です。
- 固定サイズのリストが必要な場合:
Arrays.asList()
- 可変サイズのリストが必要で、パフォーマンスが重要な場合:
Collections.addAll()
またはループ - コードの可読性や関数型プログラミングのスタイルを重視する場合: Stream API
これらの方法を理解し、使い分けることで効率的で読みやすいコードを書くことができます。
- プリミティブ型配列をArrayListに変換する場合は、自動ボクシングを利用する必要があります。
- Stream APIは、大量のデータ処理や並列処理の場面で特に効果を発揮します。
java arrays arraylist