论坛首页 入门技术论坛

关于Collection.toArray(new T[0])自己的一点猜想

浏览 5004 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-20  
1.5的手册中是这么解释这个方法的:
如果参数的长度大于集合中元素的数量,那只把集合的元素放到数组里,如果相等,就全放进去,如果数组长度小,就生成一个新的对应数组


是不是说如果加入的参数大于或等于集合元素的数量,就先把集合的元素放入new T[]这个数组里,再由这个T赋值给自己定义的T类型的数组
如果加入的参数小于集合元素的数量,则声明一个新的数组(我们并不知道这个数组的名字),再由这个我们不知道名字的数组赋值给自己定义的T类型的数组


希望高人能够帮我解惑
   发表时间:2007-06-21  
自己顶一下
0 请登录后投票
   发表时间:2007-06-21  
自己顶一下
0 请登录后投票
   发表时间:2007-06-21  
你有时间问,为什么不自己看一下源代码,或者测一下呢?

源码
    public <T> T[] toArray(T[] a) {
        if (a.length < size)
            a = (T[])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;
    }


测试

import java.util.ArrayList;

/**
 * @author Administrator
 *
 */
public class ToArrayTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList al = new ArrayList();
		for (int i = 0; i < 10; i++) {
			al.add(String.valueOf(i));
		}
		String[] s1 = (String[]) al.toArray(new String[15]);
		for (int i = 0; i < s1.length; i++) {
			System.out.println(i+","+s1[i]);
		}
		String[] s2 = (String[]) al.toArray(new String[5]);
		for (int i = 0; i < s2.length; i++) {
			System.out.println(i+","+s2[i]);
		}
	}

}
0 请登录后投票
   发表时间:2007-06-21  
恩。自己要注意看看源代码了~
0 请登录后投票
   发表时间:2007-08-27  
查询java API吧
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics