集合转数组 toArray()方法

1ArrayList之toArray:
toArray有两个重载的方法:
(1)list.toArray();
(2)list.toArray(T[] a);
第一个是,将list直接转为Object[] 数组;
第二个,是将list转化为你所需要类型的数组,当然我们再用的时候会转化为与list内容相同的类型。
举个例子:

Collection<String> arr = new ArrayList<String>();

	       arr.add("a");

	       arr.add("b");

	       arr.add("b");//可以添加重复的对象
	       System.out.println(arr);
	        String[] str = (String[])arr.toArray();//erro	  

运行结果如下:

[a, b, b]
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
	at cn.wiztek.reiss.dy.service.impl.DyServiceImpl.main(DyServiceImpl.java:2242)

不能将Object[] 转化为String[],转化的话只能是取出每一个元素再转化。
只能这样:

   Collection<String> arr = new ArrayList<String>();

	       arr.add("a");

	       arr.add("b");

	       arr.add("b");//可以添加重复的对象
	       System.out.println(arr);
	       Object[] o = arr.toArray();
	       for (int i = 0; i < o.length; i++) {
	           String e = (String) o[i];
	           System.out.println(e);
	       }

运行结果:

[a, b, b]
a
b
b

这说明用第一种方法是不太好使的,那我们用第二种方法试一下:

 Collection<String> arr = new ArrayList<String>();

	       arr.add("a");

	       arr.add("b");

	       arr.add("b");//可以添加重复的对象
	       System.out.println(arr);	     

	       String[] obj1 = arr.toArray(new String[arr.size()]);//第二种方法
	       System.out.println(obj1);
	}

运行结果:

[a, b, b]
[Ljava.lang.String;@2429de03
关于这个一串,这样理解:
([:表示一维数组 。
[[:表示二维数组 。
L:表示一个对象 。
java.lang.String:表示对象的类型 。
@:后面表示该对象的hashCode。

因此访问数组元素时,需要另外使用for循环遍历数组,不能直接通过数组名访问所有数组元素。)

如果觉得遍历很麻烦,可以重写toString方法(还是得写遍历啊!),代码附上:

public static String toString(Object o){
		if (o instanceof String){
			return String.valueOf(o);
		}else if (o instanceof  Object[]){
			String str = "";
			for (Object obj : (Object[])o){
				str +=String.valueOf(obj);
			}
			return str;
		}
		return "";
	}

运行 toString(obj1),得到结果是:

a, b, b]
abb

可以看出,不带参数的toArray()方法,是构造的一个Object数组,然后进行数据copy,此时进行转型就会产生ClassCastException
而带参数的toArray(T[] a) 方法,则是根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,虽然方法本身还是以 Object 数组的形式返回结果,不过由于构造数组使用的ComponentType跟需要转型的ComponentType一致,就不会产生转型异常。
在复习一遍!
list.toArray();
String[] str = (String[])arr.toArray();//erro
会出错,会出错!

String[] str = arr.toArray( new String [arr.size] );
根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,
没问题。

记住了吗?在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值