关于Arrays类中toArray方法的总结
? ? ??
? 學了差不多兩年的Java,數組類Arrays應該是我最常用到的類之一了,在整個學習的過程中,會更常用到一個方法,那就是toArray方法,因為將Collections類型的集合轉化為數組后,將會更容易進行輸出,個單個的便利循環處理:但是這個方法有幾個特別需要注意的地方,希望對后來的初學者有些作用,也希望大家批評指正!
首先看一下下列的代碼:
importjava.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[]args) {
List list = new ArrayList();
list.add("1");
list.add("2");
String[] tt =(String[])list.toArray(new String[0]);
}
}
這段代碼是沒問題的,但我們看到String[] tt =(String[]) list.toArray(newString[0])中的參數很奇怪,然而去掉這個參數new String[0]卻在運行時報錯,其實oArray有兩個方法:
public Object[] toArray() {
Object[] result = newObject[size];
System.arraycopy(elementData, 0,result, 0, size);
return result;
}
不帶參數的toArray方法,是構造的一個Object數組,然后進行數據拷貝,此時進行轉型就會產生ClassCastException,這也就是上述問題的rootcause了。
public Object[] toArray(Objecta[]) {
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;
}
而帶參數的toArray方法,則是根據參數數組的類型,構造了一個對應類型的,長度跟ArrayList的size一致的空數組,雖然方法本身還是以Object數組的形式返回結果,不過由于構造數組使用的ComponentType跟需要轉型的ComponentType一致,就不會產生轉型異常。
總結
以上是生活随笔為你收集整理的关于Arrays类中toArray方法的总结的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 在Java语言里 ==和equals的区
 - 下一篇: 颠覆:链表在删除和插入的效率一定优于数组