ArrayList的toArray(轉(zhuǎn))
http://www.cnblogs.com/ihou/archive/2012/05/10/2494578.html
ArrayList提供了一個(gè)將List轉(zhuǎn)為數(shù)組的一個(gè)非常方便的方法toArray。toArray有兩個(gè)重載的方法:
1.list.toArray();
2.list.toArray(T[] a);
對(duì)于第一個(gè)重載方法,是將list直接轉(zhuǎn)為Object[] 數(shù)組;
第二種方法是將list轉(zhuǎn)化為你所需要類型的數(shù)組,當(dāng)然我們用的時(shí)候會(huì)轉(zhuǎn)化為與list內(nèi)容相同的類型。
不明真像的同學(xué)喜歡用第一個(gè),是這樣寫:
1 2 3 4 5 6 7 | ArrayList<String> list= new ArrayList<String>(); for ( int i = 0 ; i < 10 ; i++) { list.add( "" +i); } String[] array= (String[]) list.toArray(); |
結(jié)果一運(yùn)行,報(bào)錯(cuò):
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
原因一看就知道了,不能將Object[] 轉(zhuǎn)化為String[].轉(zhuǎn)化的話只能是取出每一個(gè)元素再轉(zhuǎn)化,像這樣:
1 2 3 4 5 | Object[] arr = list.toArray(); for ( int i = 0 ; i < arr.length; i++) { String e = (String) arr[i]; System.out.println(e); } |
所以第一個(gè)重構(gòu)方法就不是那么好使了。
實(shí)際上,將list世界轉(zhuǎn)化為array的時(shí)候,第二種重構(gòu)方法更方便,用法如下:
1 2 | String[] array = new String[list.size()]; list.toArray(array);<br><br>另附,兩個(gè)重構(gòu)方法的源碼: |
1.
public Object[] toArray(); {
Object[] result = new Object[size];
System.arraycopy(elementData, 0, result, 0, size);;
return result;
}
2.
public Object[] toArray(Object a[]); {
if (a.length < size);
a = (Object[]);java.lang.reflect.Array.newInstance(
a.getClass();.getComponentType();, size);;
System.arraycopy(elementData, 0, a, 0, size);;
if (a.length > size);
a[size] = null;
return a;
}
1 | <br><br> |
1 2 | <br> |
|
|
posted on 2013-07-04 11:52 一堣而安 閱讀(254) 評(píng)論(0) 編輯 收藏 所屬分類: java