Java中Arrays的asList()方法
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>
原文地址:http://www.java3z.com/cwbwebhome/article/article8/83483.html?id=4483
相關文章
- Arrays.asList存在的坑
- Java踩坑記系列之Arrays.AsListJava
- Arrays.asList()是個坑
- Arrays.asList():使用指南
- java原始碼分析 Arrays.asList()與Collections.unmodifiableList()Java原始碼
- Arrays.asList()使用異常:java.lang.UnsupportedOperationExceptionJavaException
- 集合框架-Arrays工具類的asList()方法(把陣列轉成集合)框架陣列
- Java中Arrays作用Java
- 通過Arrays.asList方法將陣列轉成集合後,能否修改集合個數?陣列
- 關於Arrays.asList返回List無法新增和刪除?
- Java 中,Arrays 轉 List 的那些坑Java
- 【java】Arrays類Java
- Arrays.asList()返回的是一固定長度的List,不支援add() remove() clear()等操作REM
- Java Arrays.sort()Java
- java Arrays陣列Java陣列
- java中的Arrays這個工具類你真的會用嗎Java
- Java容器工具類ArraysJava
- JAVA基礎--Arrays類Java
- java中的方法Java
- 【Java】Arrays.copyOf & System.arraycopyJava
- Java 中的方法引用Java
- java.util.Arrays 快速使用介紹Java
- Arrays.Sort()中的那些排序演算法排序演算法
- Arrays
- java Arrays.copyOf實現淺複製Java
- Java集合中的排序方法Java排序
- Java中的泛型方法Java泛型
- Java中的方法內聯Java
- Java中Array的常用方法Java
- delphi open arrays和dynamic arrays區別
- [瘋狂Java]陣列:Arrays(陣列工具類)Java陣列
- 六,Arrays
- Arrays Basics
- 關於Java中的equals方法Java
- Java中Map的遍歷方法Java
- Java中Object類的常用方法JavaObject
- Java中Scanner類的常用方法Java
- Java中Integer類的基本方法Java