ホームページ >Java >&#&チュートリアル >Javaで配列をリストに変換する方法
1. 最も一般的な方法 (必ずしも最適であるとは限りません)
#Arrays.asList(strArray) メソッドを使用して、配列をリストに変換した後は、リストの追加や削除はできません。の場合は、確認と変更のみが可能で、それ以外の場合は例外がスローされます。 キー コード: List list = Arrays.asList(strArray);private void testArrayCastToListError() { String[] strArray = new String[2]; List list = Arrays.asList(strArray); //对转换后的list插入一条数据 list.add("1"); System.out.println(list); }実行結果:
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at com.darwin.junit.Calculator.testArrayCastToList(Calculator.java:19) at com.darwin.junit.Calculator.main(Calculator.java:44)プログラムは list.add("1") で例外をスローします。 UnsupportedOperationException。 理由分析: Arrays.asList(strArray) の戻り値は、java.util.Arrays クラスのプライベート静的内部クラス java.util.Arrays.ArrayList です。 java.util.ArrayList クラス。 java.util.Arrays.ArrayList クラスには set()、get()、contains() などのメソッドがありますが、add() メソッドや Remove() メソッドがないため、add() メソッドを呼び出すとエラーが報告されます。 。 使用シナリオ: Arrays.asList(strArray) メソッドは、配列をリストに変換した後にのみ使用できます。値を追加または削除する必要はありません。メソッドとしてのみ使用できます。読み取るデータソース。
2. 配列を List に変換した後、追加、削除、変更、検索のメソッドがサポートされます
ArrayList のコンストラクターを通じて、戻り値Arrays.asList(strArray) の が java から .util.Arrays.ArrayList に変更され、 java.util.ArrayList に変換されます。 キーコード:ArrayListprivate void testArrayCastToListRight() { String[] strArray = new String[2]; ArrayList<String> list = new ArrayList<String>(Arrays.asList(strArray)) ; list.add("1"); System.out.println(list); }実行結果:要素「1」の追加に成功しました。
[null, null, 1]使用シナリオ: 配列をリストに変換した後、リストの追加、削除、変更、クエリを実行する必要があります。これは、リスト内のデータ量が大きくない場合に使用できます。
3. 収集ツール クラスの Collections.addAll() メソッドを使用して変換します (最も効率的)
Collections.addAll(arrayList, strArray) を使用して変換します同じ長さのリストを作成し、Collections.addAll() メソッドを使用して配列内の要素をバイナリに変換し、リストに追加します。これが最も効率的な方法です。 。 キーコード:ArrayList< String> arrayList = new ArrayList<String>(strArray.length); Collections.addAll(arrayList, strArray);テスト:
private void testArrayCastToListEfficient(){ String[] strArray = new String[2]; ArrayList< String> arrayList = new ArrayList<String>(strArray.length); Collections.addAll(arrayList, strArray); arrayList.add("1"); System.out.println(arrayList); }実行結果: 要素「1」も追加できました。
[null, null, 1]使用シナリオ: 配列をリストに変換した後、リストを追加、削除、変更、クエリする必要があります。リスト内のデータの量が膨大な場合は、リストを最初に使用すると、改善される可能性があります動作速度。 注: Collections.addAll() メソッドのソース コードを添付します:
public static <T> boolean addAll(Collection<? super T> c, T... elements) { boolean result = false; for (T element : elements) result |= c.add(element);//result和c.add(element)按位或运算,然后赋值给result return result; }質問回答 質問: 配列型が整数配列の場合、変換時にエラーが報告されますかto List?回答: JDK1.8 環境でテストしたところ、これら 3 つの変換方法は問題ありませんでした。安全に使用できます。 Integer[] 整数配列を List に変換する方法とテスト結果は次のとおりです。
方法 1: 追加と削除はサポートされていません
Integer[] intArray1 = new Integer[2]; List<Integer> list1 = Arrays.asList(intArray1); System.out.println(list1);実行結果:
[null, null]
方法 2: 追加と削除をサポートします
Integer[] intArray2 = new Integer[2]; List<Integer> list2 = new ArrayList<Integer>(Arrays.asList(intArray2)) ; list2.add(2); System.out.println(list2);実行結果:
[null, null, 2]
方法 3: 追加と削除をサポートします。大量のデータに対して最も効率的です
Integer[] intArray3 = new Integer[2]; List<Integer> list3 = new ArrayList<Integer>(intArray3.length); Collections.addAll(list3, intArray3); list3.add(3); System.out.println(list3);実行結果:
[null, null, 3]要約すると、整数 Integer[] 配列は List
## に変換されます。 #エラーが発生しやすい点: 考えられるエラーは次のように変換されます:
int[] intArray1 = new int[2]; List<Integer> list1 = Arrays.asList(intArray1);//此处报错!!!
エラーの理由: 等号の両側の型が矛盾しており、当然コンパイルは失敗します。分析については以下を参照してください。
それでは、配列を宣言するとき、int[] または Integer[] を使用する必要がありますか?どちらの宣言メソッドで正しく List に変換できますか?
回答: 変換には Integer[] のみを使用できます。 List
その理由は次のように分析されます。
Java ソース コード内の List の定義を見てみましょう (ソース コードが理解できなくても心配しないでください)。非常に簡単に理解できるので、分析してみましょう):
public interface List<E> extends Collection<E> {省略…}
public static List asList(T... a) { return new ArrayList<>(a); }
int[] intArray1 = new int[1]; Arrays.asList(intArray1);//编译不报错 List<Integer> list1 = Arrays.asList( intArray1);//编译报错
回答:
以上がJavaで配列をリストに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。