JavaにおけるArrays.asList()メソッドの詳細と例
2090 ワード
Arrays.asList()は配列をリストとする.
問題は次のとおりです.
所望の出力はlistにも4つの要素,すなわちsizeは4であるが,結果は1である.
理由は次のとおりです.
Arrays.asListでは,この方法は1つの変長パラメータを受け入れ,一般に配列パラメータと見なすことができるが,int[]自体が1つのタイプであるため,a変数がパラメータとして伝達される場合,コンパイラは1つの変数のみが伝達されたと考え,この変数のタイプはint配列であるためsizeは1であり,リスト中の配列の個数に相当する.基本タイプは汎用パラメータとして使用できないので、当然パッケージタイプを使用するべきですが、ここでは間違いなく、配列は汎用化できるので、変換後listにintタイプの配列があります.
問題は次のとおりです.
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
}
}
所望の出力はlistにも4つの要素,すなわちsizeは4であるが,結果は1である.
理由は次のとおりです.
Arrays.asListでは,この方法は1つの変長パラメータを受け入れ,一般に配列パラメータと見なすことができるが,int[]自体が1つのタイプであるため,a変数がパラメータとして伝達される場合,コンパイラは1つの変数のみが伝達されたと考え,この変数のタイプはint配列であるためsizeは1であり,リスト中の配列の個数に相当する.基本タイプは汎用パラメータとして使用できないので、当然パッケージタイプを使用するべきですが、ここでは間違いなく、配列は汎用化できるので、変換後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}.
*
* This method also provides a convenient way to create a fixed-size
* list initialized to contain several elements:
*
* List stooges = Arrays.asList("Larry", "Moe", "Curly");
*
*
* @param a the array by which the list will be backed
* @return a list view of the specified array
*/
@SafeVarargs
public static List asList(T... a) {
return new ArrayList<>(a);
}
した でサポートされている サイズのリストを します.( りリストの は に「 」されます.)この はCollection.toArrayとともに、 ベースのAPIとcollectionベースのAPIとの しとして します. されるリストはシーケンス です.
したがって、 のリストを する は、パラメータを すときにArray.copyOf(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[] に が り てられていない 、int[] のように0ではなくnullがデフォルトです.
に して、みんなを けることができることを んで、みんなの に する に します!