ArrayList中的toArray()[通俗易懂]

ArrayList中的toArray()[通俗易懂]ArrayList的toArrayArrayList提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法:1.list.toArray();2.list.toArray(T[] a);对于第一个重载方法,是将list直接转为Object[]数组;第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为

大家好,又见面了,我是你们的朋友全栈君。

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);
	//或者直接传入为0的数组
	list.toArray(new String[0]);
<span style="white-space:pre">	</span>//list.toArray(new String[]{});

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

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;}

原文出处:

http://www.cnblogs.com/ihou/archive/2012/05/10/2494578.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146584.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • jar包与war包的区别

    jar包与war包的区别ar包:对于学习java的人来说应该并不陌生。我们也经常使用也一些jar包。其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已。里面就是一些class文件。当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。这是jar的里面的class文件war包:其实就是一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配

  • 推荐12个运用Silverlight做的网站

    推荐12个运用Silverlight做的网站 一个用到zoom技术的示例站点:http://mosaicmaniac.com/?c=Zoom&i=horse5 下面这个站点一看应该是国内的站点,呵呵,非常具有中国特色http://www.ascendingintegration.com/Mahjongg/ 一个silverlight的拼图游戏,大家可以去尝试一下:http://www.silverlightshow.ne

    2022年10月18日
  • 2021.12.13idea激活码_最新在线免费激活

    (2021.12.13idea激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • 函数指针和函数指针数组及其应用

    函数指针和函数指针数组及其应用1.函数指针先来看一个简单的例子。inta=3;void*p=&a;这是一个基础的不能再基础的例子。相信学过指针的都能看得懂。P是一个指针,指向a。a是一个整形变量。函数指针和其类似,只不过其指向的不是一个变量,而是一个函数,仅此而已。话不多说,看个例子。void(*funcPointer)(doublex);voidf1(doublex){}voidf

  • 鼠标捕获(setCapture,releaseCapture)的学习

    鼠标捕获(setCapture,releaseCapture)的学习鼠标捕获(setCapture)作用是将鼠标事件捕获到当前文档的指定的对象——对指定的对象设置鼠标捕获。这个对象会为当前应用程序或整个系统接收所有鼠标事件。所谓鼠标捕获,是指对鼠标事件(onmousedown,onmouseup,onmousemove,onclick,ondblclick,onmouseover,onmouseout)进行捕捉,使在容器内的子对象的鼠标事件均…

  • Intent.FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_CLE…「建议收藏」

    Intent.FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_CLE…「建议收藏」Intent.FLAG_ACTIVITY_NEW_TASK如果将intent设置这一项就会从历史队列中独立出来,生成一个新的activity的队列。FLAG_ACTIVITY_CLEAR_TOP就会将新站第一个activity在原来队列中位于他上面的activity都清空。例如有四个activityABCD,他们中都有一个按钮,按a的按钮会跳到b,b->c,c->d,d->b,如果acti

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号