ホームページ  >  記事  >  Java  >  Javaで配列をリストに変換する方法

Javaで配列をリストに変換する方法

WBOY
WBOY転載
2023-04-19 09:13:042905ブラウズ

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 に変換されます。

キーコード:ArrayList

private 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> {省略&hellip;}
Arrays.asList() の Java ソース コード定義を見てみましょう:

public static List asList(T... a) {     return new ArrayList<>(a); }

    上記のソース コードからわかるように、List が宣言されている場合は、ジェネリック
  • 参照型とは何ですか? 整数は参照型ですが、int とはどのような型ですか? Int は基本的なデータ型であり、参照型ではありません。 java
  • 類推すると、他の 8 つの基本データ型 byte、short、int、long、float、double、char は参照型ではないのはこれが理由です。 8 つの基本データ型 List の仮パラメータとして使用できるデータ型はありません。ただし、String、array、class、interface は参照型であり、List の仮パラメータとして使用できるため、List が存在します。
  • 上記の基礎知識を踏まえて、なぜ、次の 2 行のコードは次のとおりです。コードの 2 行目は正常にコンパイルされますが、3 行目はコンパイルされてエラーが報告されます?
int[] intArray1 = new int[1];  Arrays.asList(intArray1);//编译不报错 List<Integer> list1 = Arrays.asList( intArray1);//编译报错

回答:

    コードの 2 行目、Arrays.asList() メソッドの入力パラメータは参照型 int[] であり、戻り値の型は List
  • である必要があります。3 行目では、型が異なるためエラーが報告されます。等号の両側が矛盾しています。左側: List

以上がJavaで配列をリストに変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。