`
uz31415926
  • 浏览: 7145 次
社区版块
存档分类
最新评论

ArrayList的toArray问题

阅读更多
arrayList.toArray()出错
                                      

public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("s1");
        arrayList.add("s2");
        String[] ss = (String[]) arrayList.toArray();  //这句抛出异常:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;    }


解决方法:

String[] ss = (String[]) arrayList.toArray(new String[0]);


理由:

下面是ArrayList的两个toArray()方法的源代码:



public Object[] toArray() {    Object[] result = new Object[size];    System.arraycopy(elementData, 0, result, 0, size);    return result;}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;}

可以看出,不带参数的toArray方法,是构造的一个Object数组,然后进行数据拷贝,此时进行转型就会产生ClassCastException
而带参数的toArray方法,则是根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,虽然方法本身还是以Object数组的形式返回结果,不过由于构造数组使用的ComponentType跟需要转型的ComponentType一致,就不会产生转型异常

没参数的toArray用处:

ArrayList arrayList = new ArrayList();arrayList.add("test1");arrayList.add("test2");Object[] ss = arrayList.toArray();//这里不需要转型,也不能使用转型for (int i = 0; i < ss.length; i++) {    String str = (String) ss[i];//这里可以进行转型,取出原ArrayList里面存放的对象    System.out.println(str);}
分享到:
评论

相关推荐

    C#中Array与ArrayList用法及转换的方法

    ArrayList与Array的区别概述  ArrayList 是数组的复杂版本。ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能。例如:  Array 的容量是固定的,而 ArrayList 的容量是根据需要自动...

    Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析

    主要介绍了Java ArrayList.toArray(T[]) 方法的参数类型是 T 而不是 E的原因分析的相关资料,需要的朋友可以参考下

    JAVA ArrayList详细介绍(示例)

    本文对JAVA ArrayList做了详细介绍,文中学到了ArrayList源码解析、ArrayList遍历方式、toArray()异常,最后给出了ArrayList示例。

    Copy ArrayList的四种方式

    文章目录简介使用构造函数使用addAll方法使用Collections.copy使用stream总结 Copy ArrayList的四种方式 简介 ArrayList是我们经常会用到的... elementData = c.toArray(); if ((size = elementData.length) != 0) {

    07:ArrayList集合的增删减除.pdf

    1.长 增加add,查看下表,遍历,删除值,下标,数组,改下标付值, ...8.ToArray();--object 不足:1.如果存储值类型,需要装箱和拆箱操作 2.不管什么类型的数据,存储之后,取出来使用必须通过类型转换

    java8源码-csn-list:ArrayList、LinkedList、Vector、Stack源码分析

    v.toArray(new Integer[v.size()]) Fail-Fast机制 fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。 通过modCount的值来判断是否多...

    java8源码-note:笔记

    ArrayList.toArray() 1.9 String 1.10 HTTP 1.11 HashMap 2.进阶 2.1 关于Java8 stream的使用 2.2 关于读写分离遇到的问题 2.3 对象引用类型 2.4 ThreadLocal的问题根源 2.5 Classloader的秘密 2.6 JUC之Atomic 2.7 ...

    教你如何设置动态下拉框

    List&lt;SelectItem&gt; tempLists = new ArrayList(); for (CItemType initComboo : initComboos) { tempLists.add(new SelectItem(initComboo.getItemTypeNum(),initComboo.getItemTypeName())); } return ...

    基于poi Excel导出

    System.out.println(map.values().toArray()[0]); System.out.println(Calendar.getInstance()); XLPExcel xlpExcel = new XLPExcel(); List, Object&gt;&gt; arrayList = new ArrayList,Object&gt;&gt;(); arrayList....

    Collectionjs:SortedSet,SortedList,Queue,ArrayList,LinkedList,TreeSet,HashMap

    它可以在 nodejs 和浏览器中使用。...for(var c in sets.toArray()) console.log(sets.get(c)); var list=new Collection.SortedList(); list.compare=function(a,b) { if(a.name&lt;b&gt;b.name) return

    关于列表有用的一些方法.pptx

    ArrayList &lt;String&gt; list = new ArrayList(Arrays.asList(array)); 2. 从列表创建数组:列表.toArray(数组名) String[] array1 = new String[list.size()]; list.toArray(array1); 3.如果列表中的元素是可比较大小的...

    springmvc-jdbcTemplate

    import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.collections.CollectionUtils; import org.apache.log4j.Logger; import org.springframework.beans....

    集合类Array List HashTable实例操作练习

    使用类似于数组 属性 Capacity Count 方法 Add() AddRange() Remove() RemoveAt() Clear() Contains() ToArray() Hashtable 键值对(KeyValuePair)的集合,类似于字典 a、ArrayList对值类型的操作 代码如下: using ...

    zip4j_1.3.2 java代码压缩、解压文件

    /** ... * * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者"". * 如果传null或者""则将压缩文件存放在当前... extractedFileList.toArray(extractedFiles); return extractedFiles; }

    你连存活到JDK8中著名的Bug都不知道,我怎么敢给你加薪

    CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public ArrayList(Collection&lt;? extends E&gt; c) { elementData = c.toArray(); ...

    java解析json

    return jsonArray.toArray(); } public static void setDateFormat2Java() { JSONUtils.getMorpherRegistry().registerMorpher( new DateMorpher(new String[] { "yyyy-MM-dd", "yyyy-MM-dd HH:mm...

    深入理解Java中的容器

    1、容器不是数组,不能通过下标的方式访问容器中的元素2、数组的所有功能通过Arraylist容器都可以实现,只是实现的方式不同3、如果非要将容器当做一个数组来使用,通过toArray方法返回的就是一个数组示例程序:输出...

    Linq基础学习资料,通俗易懂

    6.3.18 ToArray 将集合转换为数组,浅复本 24 6.3.19 ToList 将集合转换为List集合,浅复本 25 6.3.20 ToDictionary 将集合转换为, V&gt;集合,浅复本 25 7 Lambda表达式 25 7.1 例1(比效) 25 7.2 例2(多参) 27 7.3 ...

Global site tag (gtag.js) - Google Analytics