黑马程序员技术交流社区
标题:
关于集合变数组
[打印本页]
作者:
吴通
时间:
2012-8-31 20:13
标题:
关于集合变数组
import java.util.*;
class CollectionToArray
{
public static void main(String[] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("abc1");
al.add("abc2");
al.add("abc3");
String[] arr=al.toArray(new String[0]); //这里面写的是数组的长度,当为0的时候为什么还能存?不写为什么不行?
/*
1.指定类型的数组到底多长才行呢?
当指定类型的数组长度小于集合的size,那么该方法内部会创建一个新的数组,长度为集合的size
当指定类型的数组长度大于集合的size,就不会新创建新数组了,而是使用传递进来的数组。
所以创建一个刚刚好的数组最优 那么这里写0和al.size是不是都一样?
*/
sop(Arrays.toString(arr));
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
作者:
孙沛
时间:
2012-8-31 20:32
<T> T[] toArray(T[] a)需要一个T[] a,new String[0]相当于开辟了一个长度为0的String[],并且指定了泛型。这样函数的调用是将al转换了一个String的数组。
String[] arr = al.toArray(new String[al.size()])
两种效果是一样的
作者:
黑马张涛
时间:
2012-8-31 20:47
当指定类型的数组长度小于集合的size,那么该方法内部会创建一个新的数组,长度为集合的size
这边不是说,会创建一个新的数组吗,那你传进去的数组不是没用上,这样不是要浪费内存了吗?
作者:
袁艳超
时间:
2012-8-31 21:01
首先,toArray(T[] a)方法的参数是一个数组,你给它传入什么类型的数组,它返回的就是什么类型的数组,
数组的长度是固定的,既然是新建数组,数组的容量大小在创建时必须指定,所以[]中必须有数字,但不一定是0;
toArray(T[] a)的方法体如下:
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
和楼主知道的一样:
当指定类型的数组长度小于集合的size,那么该方法内部会创建一个新的数组,长度为集合的size,并且把数据拷贝一遍;
当指定类型的数组长度大于集合的size,就不会新创建新数组了,而是使用传递进来的数组,只不过是将数组中紧跟在集合末尾的元素设置为 null;
综上就可以看出,
当做参数传入进去的 新建数组,长度小于集合的size效率是低的,
长度是刚刚好 ,还是大于集合的size,没多大区别,取决于它返给你的数组,你是否还要对其进行操作
如果你还要对返回的数组进行添加,那新建数组长度还是要大于集合size好,你觉得呢
作者:
武庆东
时间:
2012-8-31 22:08
格式:
for(元素类型type 元素变量x : 遍历对象obj)
{
引用了x的java语句;
}
实例:
public class Test {
public static void main(String[] args)
{
int[] a = {1,2,3};
for(int i : a)
System.out.print(i + " ");
}
}
作者:
黄敏
时间:
2012-8-31 22:30
首先要知道泛型怎么用,然后才能看懂这个方法public <T> T[] toArray(T[] a).要是对泛型不是很了解,可以使用public Object[] toArray()这个方法,返回Object数组,里面不用传递任何参数
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2