JavaにおけるArrays.asList()メソッドの詳細と例

2090 ワード

Arrays.asList()は配列をリストとする.
問題は次のとおりです.

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がデフォルトです.
に して、みんなを けることができることを んで、みんなの に する に します!