先看看List和Array怎样转换。
List --> Array :
Collection这个接口提供了一个 toArray()方法,所以要将任何一个Collection的实现转换为Array,调用这个函数就好了:
Array --> List :
Arrays这个类提供了一个 asList()的函数:
貌似到这里,问题就解决了。可是如果确实如此的话,我也不用写这篇blog了。
问题出在asList()这个函数上,这是它的完整定义:
public static <T> List<T> asList(T... a)
但其实,它返回的不是一个”完整的“List对象,而是一个视图(View)。这意味着什么呢?在上面的示例代码中,如果我们改变array中的元素,那么list中的元素也会相应的改变。实际上,array和list指向的是同一组数据。
但是,toArray()这个函数又不存在这个问题。toArray()返回的是一个”safe“的数组。意思就是toArray()会将List中的数据通过值传递的方式拷贝到新的数组中,List中的数据和新创建的数组中的数据不存在引用。在第一组示例代码中,如果改变list中的元素,不会影响到array中的数据。
很有趣吧,看上去是一个双向的转换,但其实asList()和toArray()在语义上有着很大的差别。
问题还没完呢,接着再详细讨论一下toArray():
public Object[] toArray()
可以看出,toArray返回的是一个类型为Object[]的对象。现在再来看一段代码:
当执行到第三句的时候,会抛出异常”java.lang.ClassCastException“。why?
我没有找到很正式的答案,可以简单的认为数组不支持向下转型。或者可以这样认为,只有当一个父类的引用指向子类对象时,这个父类的引用才能够向下转换成子类引用。而objArray的类型就是Object,intArray的类型是Integer,这两都是实例对象,你不能够将一个Object的对象转换为Integer的对象。
难道没有一个办法能够将list.toArray()返回的结果转换成对应类型的数据了吗?
当然有。
最简单的办法:
呵呵,看懂了这段代码吗,其实就是调用Collection接口提供的另外一个函数:
public Object[] toArray(Object[] a)
具体的用法看JAVADoc吧。
分享到:
相关推荐
Java学习笔记-Scoket.pdf ...Java学习笔记-Scoket.pdf涵盖了Socket编程的基础知识、Java中Socket的使用、Socket通信的原理及应用等方面的内容,为学习Java编程语言和Socket编程提供了系统的参考资料。
Java学习笔记-Java后来者.exe
Java开发 - 尚硅谷JavaWeb学习笔记 - Part1: https://blog.csdn.net/qq_63317769/article/details/139883728 Java开发 - 尚硅谷JavaWeb学习笔记 - Part2: Java开发 - 尚硅谷JavaWeb学习笔记 - Part3: Java开发 ...
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
通过深入学习和实践这份"JAVA学习笔记"中的内容,初学者不仅可以掌握Java编程的基础,还能进一步了解高级特性和最佳实践,从而成为一名熟练的Java开发者。这份笔记的实用性确保了学习过程的高效性和趣味性,让学习...
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
Java学习笔记---从入门到精通之路.pdf Java是当前最流行的编程语言之一,本笔记旨在帮助初学者从基础到精通J2EE高手之路。本笔记涵盖了Java基础知识、J2EE框架、Web开发、数据库操作、图形游戏开发等方面的知识点,...
JAVA学习笔记-第七章 面向对象中级(二)
Java学习笔记--PrintStream分享 PrintStream是一种输出流,能够将Java基本数据类型转换为系统预设编码下的字元,再输出至OutputStream中。在Java I/O流中,PrintStream是OutputStream的子类,主要用于将数据输出至...
精心整理好的-Java学习笔记-供你使用
这份“java学习笔记-达内科技”涵盖了从基础到高级的Java编程知识,旨在帮助初学者和进阶者深入理解Java的核心概念和技术。 首先,Java概述部分会介绍Java的历史、特点以及开发环境的搭建,包括安装JDK(Java ...
Java学习笔记->1.关键字、变量以及常量.md
培训机构Java教学笔记-学习资料.zip培训机构Java教学笔记-学习资料.zip培训机构Java教学笔记-学习资料.zip培训机构Java教学笔记-学习资料.zip培训机构Java教学笔记-学习资料.zip培训机构Java教学笔记-学习资料.zip
总的来说,这份"java学习笔记-初学者的福音"将引导初学者逐步了解并掌握Java编程语言的核心概念和常用技术。通过系统学习并实践其中的示例,初学者将能够构建自己的Java应用程序,并为更高级的编程概念打下坚实的...