JavaにおけるArays.asList()方法の詳細及び実例
2117 ワード
Arays.asList()は、配列をリストとしています。
問題は以下のとおりです
理由は以下の通りです
Arays.asListでは、この方法は長いパラメータを受け入れ、配列パラメータとして一般的に見られますが、int[]自体が一つのタイプなので、a変数がパラメータとして伝達される場合、コンパイラは一つの変数だけが伝えられたと考えています。この変数のタイプはint配列ですので、sizeは1で、Listの配列の個数に相当します。基本的なタイプは泛型のパラメータとしては使えませんが、包装タイプを使うべきです。しかし、ここでは間違いがないです。配列は汎型化できるので、転換後はlistの中にint型の配列があります。
したがって、複数のリストを作成する場合は、パラメータを転送する際に、Arays.co pyOf(a)方法を使用したほうがいいです。そうでなければ、リストの変更は配列の変更に相当します。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。
問題は以下のとおりです
public class Test {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4};
List list = Arrays.asList(a);
System.out.println(list.size()); //1
}
}
期待の出力はリストの中にも4つの要素があります。つまり、sizeは4ですが、結果は1です。理由は以下の通りです
Arays.asListでは、この方法は長いパラメータを受け入れ、配列パラメータとして一般的に見られますが、int[]自体が一つのタイプなので、a変数がパラメータとして伝達される場合、コンパイラは一つの変数だけが伝えられたと考えています。この変数のタイプはint配列ですので、sizeは1で、Listの配列の個数に相当します。基本的なタイプは泛型のパラメータとしては使えませんが、包装タイプを使うべきです。しかし、ここでは間違いがないです。配列は汎型化できるので、転換後はlistの中にint型の配列があります。
/**
* Returns a fixed-size list backed by the specified array. (Changes to
* the returned list "write through" to the array.) This method acts
* as bridge between array-based and collection-based APIs, in
* combination with {@link Collection#toArray}. The returned list is
* serializable and implements {@link RandomAccess}.
*
* <p>This method also provides a convenient way to create a fixed-size
* list initialized to contain several elements:
* <pre>
* List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
* </pre>
*
* @param a the array by which the list will be backed
* @return a list view of the specified array
*/
@SafeVarargs
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
指定された配列によってサポートされる固定サイズのリストを返します。戻りリストの変更は、行列に直接書きます。)この方法は、Collection.toArayとともに、配列ベースのAPIと、collectionベースのAPIとの間の橋渡しとして機能する。返したリストは、順番に並べられます。したがって、複数のリストを作成する場合は、パラメータを転送する際に、Arays.co pyOf(a)方法を使用したほうがいいです。そうでなければ、リストの変更は配列の変更に相当します。
public class Test {
public static void main(String[] args) {
Integer[] a = {1, 2, 3, 4};
List list = Arrays.asList(a);
System.out.println(list.size()); //4
}
}
最後に、Integer[]配列に値がない場合は、デフォルトはnullで、int[]配列のデフォルトは0ではありません。読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。