【转】ArrayList的toArray

【转】ArrayList的toArray

ArrayList提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法:

1.list.toArray();

2.list.toArray(T[]  a);

对于第一个重载方法,是将list直接转为Object[] 数组;

第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为与list内容相同的类型。

不明真像的同学喜欢用第一个,是这样写:

ArrayList<String> list=new ArrayList<String>();
		for (int i = 0; i < 10; i++) {
			list.add(""+i);
		}

		String[] array= (String[]) list.toArray();
		

结果一运行,报错:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

原因一看就知道了,不能将Object[] 转化为String[].转化的话只能是取出每一个元素再转化,像这样:

Object[] arr = list.toArray();
		for (int i = 0; i < arr.length; i++) {
			String e = (String) arr[i];
			System.out.println(e);
		}

所以第一个重构方法就不是那么好使了。

实际上,将list世界转化为array的时候,第二种重构方法更方便,用法如下:

String[] array =new String[list.size()];
		list.toArray(array);

另附,两个重构方法的源码:

1.
public Object[] toArray(); {
Object[] result = new Object[size];
System.arraycopy(elementData, 0, result, 0, size);;
return result;
}

2.

public Object[] toArray(Object a[]); {
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;
}


		
时间: 2024-12-29 09:46:49

【转】ArrayList的toArray的相关文章

【转】ArrayList的toArray,也就是list.toArray[new String[list.size()]];,即List转为数组

[转]ArrayList的toArray ArrayList提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法: 1.list.toArray(); 2.list.toArray(T[]  a); 对于第一个重载方法,是将list直接转为Object[] 数组: 第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为与list内容相同的类型. 不明真像的同学喜欢用第一个,是这样写: ArrayList<String> list=ne

java之ArrayList的toArray方法

ArrayList是Java在中使用频率非常高的一个方法.我们在使用ArrayList的时候,经常需要将ArrayList中的对象转换为一个数组. java已经对ArrayList进行了很好的封装,只需要调用ArrayList的toArray方法就可以从ArrayList对象中提取存放的对象的数组. ArrayList重载了如下两个toArray方法: public Object[] toArray() { return Arrays.copyOf(elementData, size); } p

ArrayList的toArray

ArrayList提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法: 1.list.toArray(); 2.list.toArray(T[]  a); 对于第一个重载方法,是将list直接转为Object[] 数组: 第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为与list内容相同的类型. 不明真像的同学喜欢用第一个,是这样写: 1 2 3 4 5 6 7 ArrayList<String> list=new Array

Java笔记---ArrayList源码分析

一.前言 一直就想看看java的源码,学习一下大牛的编程.这次下狠心花了几个晚上的时间,终于仔细分析了下 ArrayList 的源码(PS:谁说的一个晚上可以看完的?太瞎扯了).现在记录一下所得. 二.ArrayList 源码分析 2.1 如何分析? 想要分析下源码是件好事,但是如何去进行分析呢?以我的例子来说,我进行源码分析的过程如下几步: 找到类:利用 Eclipse 找到所需要分析的类(此处就是 ArrayList) 新建类:新建一个类,命名为 ArrayList,将源码拷贝到该类.因为我

JDK1.8中ArrayList的实现原理及源码分析

一.概述 ArrayList是Java开发中使用比较频繁的一个类,通过对源码的解读,可以了解ArrayList的内部结构以及实现方法,清楚它的优缺点,以便我们在编程时灵活运用. 二.源码分析 2.1 类结构 JDK1.8源码中的ArrayList类结构定义如下: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Se

Java小白集合源码的学习系列:ArrayList

目录 ArrayList源码学习 ArrayList的继承体系 ArrayList核心源码 ArrayList扩容机制 最后的总结 ArrayList源码学习 本文基于JDK1.8版本,对集合中的巨头ArrayList做一定的源码学习,将会参考大量资料,在文章后面都将会给出参考文章链接,本文用以巩固学习知识. ArrayList的继承体系 ArrayList继承了AbstracList这个抽象类,还实现了List接口,提供了添加.删除.修改.遍历等功能.至于其他接口,以后再做总结. ArrayL

java中数组与List相互转换的方法

1.List转换成为数组.(这里的List是实体是ArrayList) 调用ArrayList的toArray方法. toArray public <T> T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组:返回数组的运行时类型就是指定数组的运行时类型.如果列表能放入指定的数组,则返回放入此列表元素的数组.否则,将根据指定数组的运行时类型和此列表的大小分配一个新的数组. 如果指定的数组能容纳列表并有剩余空间(即数组的元素比列表的多),那么会将数组中紧跟在集合末

java_Collection_详细介绍

转自:http://blog.sina.com.cn/s/blog_3fb3625f0101aref.html 1.类集框架 java.util 包中包含了一些在 Java 2 中新增加的最令人兴奋的增强功能:类集. 一个类集(collection)是一组对象.类集的增加使得许多 java.util 中的成员在结构和体系结构上发生 根本的改变.它也扩展了包可以被应用的任务范围.类集是被所有 Java 程序员紧密关注的 最新型的技术. 除了类集,java.util 还包含了支持范围广泛的函数的各种

Android开发之数组和List之间的转换

1.List转换成为数组.(这里的List是实体是ArrayList) 调用ArrayList的toArray方法. toArray public <T> T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组:返回数组的运行时类型就是指定数组的运行时类型.如果列表能放入指定的数组,则返回放入此列表元素的数组.否则,将根据指定数组的运行时类型和此列表的大小分配一个新的数组. 如果指定的数组能容纳列表并有剩余空间(即数组的元素比列表的多),那么会将数组中紧跟在集合末