java中的asList_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 List asList(T... a) {

return new ArrayList(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 myList = Arrays.asList(intArray);

System.out.println(myList.size());

System.out.println(myList.get(0).length);

}

大概明白了:定義:

public static List asList(T... a) {

return new ArrayList(a);

}

這個T必須是對象類型。好比我們不能new ArrayList 只能new ArrayList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值