Java中Arrays的asList()方法 可以將 數組轉爲List 但是,這個數組類型必須是 引用類型的,如果是8中基本數據類型就不可以 原因如下,引用別人的一篇文章:
最近在用Arrays的asList()生成的List時,List元素的個數時而不正確。
Java代碼
//經多次測試,只要傳遞的基本類型的數組,生成List的元素個數均爲1
char arrc = {'a','b'};
int arrint = {1,2,4};
Arrays.asList(arrc).size() ;// 結果爲1;
Arrays.asList(arrint ).size() ;//結果爲1;
//傳遞對象數組,元素個數正確。
String arrstr = {"a","b","java","spring","hadoop","lucene"};
Arrays.asList(arrstr ).size() ;//結果爲6;
跟源碼:
Java代碼
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
繼續跟,Arrays的私有內部類ArrayList (沒搞明白,爲什麼這裏也起名爲ArrayList)
private final E[] a;
ArrayList(E[] array) {
if (array==null)
throw new NullPointerException();
a = array;
}
public int size() {
return a.length;
}
發現問題出在java5 的可變參數上。於是寫了demo,測試。
public class TestArray {
PrintStream out = System.out;
@Test
public void array() {
char[] arrc = {'a','b','c','d','e'};
out.println("傳遞char數組:");
print(arrc);
out.println("直接傳遞:");
print('a','b','c','d','e');
out.println("----------------------------");
int[] arri = {1,2,3,4,5,6,7};
out.println("傳遞int數組:");
print(arri);
out.println("直接傳遞:");
print(1,2,3,4,5,6,7);
out.println("----------------------------");
Integer[] arrInt = {1,2,3,4,5,6,7};
out.println("傳遞Integer數組:");
print(arrInt);
out.println("直接傳遞:");
print(1,2,3,4,5,6,7);
out.println("----------------------------");
String[] arrs = {"a","b","c","d","e"};
out.println("傳遞String數組:");
print(arrs);
out.println("直接傳遞:");
print('a','b','c','d','e');
out.println("----------------------------");
}
public void print(Object...arr){
out.print("內容:"+Arrays.toString(arr));
out.println("\t\t數組長度:"+arr.length+" ");
}
}
輸出結果爲:
傳遞char數組:
內容:[[C@defa1a] 數組長度:1
直接傳遞:
內容:[a, b, c, d, e] 數組長度:5
----------------------------
傳遞int數組:
內容:[[I@f5da06] 數組長度:1
直接傳遞:
內容:[1, 2, 3, 4, 5, 6, 7] 數組長度:7
----------------------------
傳遞Integer數組:
內容:[1, 2, 3, 4, 5, 6, 7] 數組長度:7
直接傳遞:
內容:[1, 2, 3, 4, 5, 6, 7] 數組長度:7
----------------------------
傳遞String數組:
內容:[a, b, c, d, e] 數組長度:5
直接傳遞:
內容:[a, b, c, d, e] 數組長度:5
----------------------------
java 5 可變參數,直接傳遞值與傳遞數組處理的機制不太相同。
如果直接傳遞數組,基本類型數組將被視爲一個對象而不會被解析成數組,如果直接傳遞參數將能正常解析。因此傳遞基本類型數組時強烈建議轉爲其封裝類對象的數組 int ->Integer ,long->Long …………。(未對其封裝)
這樣寫就很清楚了吧
public static void main(String[] args) {
int[] intArray = {1,2,3};
List<int[]> myList = Arrays.asList(intArray);
System.out.println(myList.size());
System.out.println(myList.get(0).length);
}
大概明白了:定義:
public static <T> List<T> asList(T... a) {
return new ArrayList<T>(a);
}
這個T必須是對象類型。好比我們不能new ArrayList<int> 只能new ArrayList<Integer>