配列型をコレクション型に変換する必要がある場合があります。後者の方がより強力なデータ構造であり、java.util.List には通常の配列ではサポートされない関数が多数あるためです。たとえば、List の組み込みメソッドを使用して、リストに特定の値が含まれているかどうかを簡単に検出できます。以下に、配列をリストに変換する方法の例をいくつか示します。
java.util.Arrays.asList()を介して配列をリストに変換 # Arrays クラスには、変換タスクに役立つ便利なメソッド asList があります。構文は次のとおりです:
public static <T> List<T> asList(T... a)
public class Test { public static void main(String[] args) { List<String> myList = Arrays.asList("Apple"); } }
public class Test { public static void main(String[] args) { List<String> myList = Arrays.asList("Apple", "Orange"); } }
これは、「Apple」、「Orange」という 2 つの要素を含むセットを生成します。
これは可変パラメーターであるためです。配列を渡すと、配列の要素がパラメータとして認識されます。例:
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = Arrays.asList(myArray); for (String str : myList) { System.out.println(str); } } }
このようにして、String コレクションが作成されます。配列 myArray が追加されます。 myList コレクションには 3 つの要素があります。出力は次のとおりです:
Apple Banana Orange
trapこのメソッドにはいくつかの問題があります。渡された配列in はプリミティブ型の配列ではなく、オブジェクトの配列である必要があります。例:
public class Test { public static void main(String[] args) { int[] myArray = { 1, 2, 3 }; List myList = Arrays.asList(myArray); System.out.println(myList.size()); } }
コード出力は 1 です。なぜ? asList メソッドはオブジェクトの可変個引数パラメーターを予期しますが、渡されるパラメーターはプリミティブ型の配列であるため、配列コレクションを作成します。したがって、このコレクションの唯一の要素は myArray です。したがって、
myList.get(0) は myArray と同じオブジェクトを返します。
asList() によって作成されたオブジェクトは固定サイズです。 asList() メソッドによって返されるリスト オブジェクトは固定サイズであり、これ以上は収容できません。たとえば、多数の要素があります。
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = Arrays.asList(myArray); myList.add("Guava"); } }
出力は次のとおりです。
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.add(AbstractList.java:148) at java.util.AbstractList.add(AbstractList.java:108) at Test.main(Test.java:8)
myList は固定長であるため、これ以上要素を追加することはできません。
このメソッドによって返される List オブジェクトは、java.util パッケージの ArrayList ではなく、Array 内の ArrayList 型であるためです。このクラスは add、revmove、clear メソッドを実装していないため、コレクション構造を変更する呼び出しは失敗します。
基本的な配列型を List に変換します上記のように。基本型の配列を asList メソッドに渡しても機能しません。サードパーティ ライブラリを導入しない解決策は、Java8 ストリームを渡すことです。例は次のとおりです:
public class Test { public static void main(String[] args) { int[] intArray = { 5, 10, 21 }; List myList = Arrays.stream(intArray).boxed() .collect(Collectors.toList()); } }
配列の各要素は変換されますint から Integer 型 (ボックス化) に変換すると、配列は List 型に変換されます。
配列を要素を追加できるリストに変換します上記のトラップ セクションで説明したように、Arrays.asList() メソッドは次のことを行います。要素の追加または削除はサポートされていません。これを実行したくない場合は、次のような代替方法があります。
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = new ArrayList<String>(Arrays.asList(myArray)); myList.add("Guava"); } }
このコードは、新しい ArrayList オブジェクトを明示的に作成し、それに Arrays.asList の結果を追加します。 ArrayList を作成したためです。したがって、削除制限は追加されず、上記のコードの実行が終了するまでに 4 つの要素が存在します。コードの実行時に例外がスローされることを期待しないでください。
配列グループを自分でリストに変換する 問題を解決するには、独自の実装ソリューションを使用した方がよい場合があります。以下は、Java 配列をリストに変換する簡単な例です。
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = new ArrayList<String>(); for (String str : myArray) { myList.add(str); } System.out.println(myList.size()); } }
コードの期待される出力は 3 です。ロジックの実行後にコレクションには 3 つの要素があるためです。
私たちのコードの欠点は、コードが長くなり、車輪の再発明をしていることです。利点は、ニーズの変化に応じて適応してカスタマイズできることです。例: 次のコードでは、各要素がリストに 2 回追加されます。
public class Test { public static void main(String[] args) { String[] myArray = { "Apple", "Banana", "Orange" }; List<String> myList = new ArrayList<String>(); for (String str : myArray) { myList.add(str); myList.add(str); } System.out.println(myList.size()); } }
配列内のすべての要素が 2 回追加されるため、出力は 6 になります。 String 配列を List
public class Test { public static void main(String[] args) { String[] myArray = { "5", "6", "7" }; List<Integer> myList = new ArrayList<Integer>(); for (String str : myArray) { myList.add(Integer.valueOf(str)); } }}
配列内の各 String を解析し、対応する Integer に変換します。結果のリストには、変換されたすべての整数が含まれます。
推奨学習:
Java ビデオ チュートリアル以上がJavaで配列をリストに変換するにはどうすればよいですか? (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。