黑马程序员技术交流社区
标题:
ArrayList类的toArray()方法
[打印本页]
作者:
李节起
时间:
2012-4-10 23:05
标题:
ArrayList类的toArray()方法
ArrayList<String> al = new ArrayList<String>();
al.add("abc1");
al.add("abc2");
al.add("abc3");
String[] arr = al.toArray(new String[al.size()]);
复制代码
ArrayList类有个方法是toArray()和<T> T[] toArray(T[] a ),
在做转换时是ArrayList对象调用方法,对这个集合对象本身进行toArray操作,为什么要在toArray函数里面传new String[al.size()]参数呢?
这里new有什么意义?
作者:
曾晓文
时间:
2012-4-10 23:27
本帖最后由 曾晓文 于 2012-4-10 23:45 编辑
因为这里调用的ArrayList集合的toArray方法需要接收一个数组的方法,<T> T[] toArray(T[] a)。所以在调用该方法是需要把存放 从ArrayList集合转为数组的元素。一种是先创建String数组对象,再把引用传到方法去:al.toArray(strs);
String[] strs = new String[al.size()];
String[] arr = al.toArray(strs);
另一种:在调用的时候在参数类表上new String数组对象。其实质和前一中方式是一样的,也是要在堆内存里new 一个String数组对象,然后把读写地址传给toArray方法。完了之后toArray方法
返回刚才匿名String数组的引用
。String[] arr = al.toArray(new String[al.size()]);
<T> T[] toArray(T[] a)的源代码:
public <T> T[] toArray(T[]
a
) {//
a接收传进来的数组引用
if (a.length < size)
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return
a
;
}
无参数的toArray方法:方法内部帮我们new 了一个String数组对象,然后把它创建的对象引用返回给我们。所以不要再传数组进去。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2