`
xuepengcheng
  • 浏览: 46425 次
  • 性别: Icon_minigender_1
  • 来自: 郴州
社区版块
存档分类
最新评论

Collection.toArray()和toArray(Object[])

阅读更多
Collection接口处于JAVA集合框架的最顶层,它的两个直接子接口List,Set和Map接口以及这三个接口的

子类构成了整
个JAVA2的集合框架。所以掌握Collection,List,Set,Map接口的定义是学习整个集合框架最基础也是最

重要的
部分。
在Collection接口中定义了两个方法:
public Object[] toArray();
public Object[] toArray(Object[]);
它们有什么区别呢,我们先看下面的列子:
(PS:由于ArrayList实现了List接口,所以这里的具体实现类我们就使用它来作演示)
...
List arrayList = new ArrayList();
//向列表中放入10个TestObj对象
for(int i=0;i<10;i++){
arrayList.add(new TestObj());
}

TestObj[] testObj = (TestObj[])arrayList.toArray(); //强制类型转换错误
TestObj[] testObj = (TestObj[])ArrayList.toArray(new TestObj[0]); //正确
...
同是强制类型转换为什么第一次会失败呢?
考虑一下所有集合类,我们在向集合中添加元素时,集合并不管理我们添加进的对象的运行时类型,
在集合看来我们放入的对象类型都为Object。所以我们才可以将不同的类的实例添加进同一个集合里,
尽管这样作没什么好处。
当我们调用toArray()时,集合并不知道其中对象的类型,所以就返回一个Object[]来。当强制
转换这个数组时就出错了,因为它的运行时类型就是Object[]。
当调用toArray(Object[])时发生什么呢?首先解释一下参数Object[],根据多态原则父类出现的地方都

可以
用子类代替,所以这里传入的参数可以是任何类型的数组(内置的除外)。JDK1.4的帮助文档中这样解

释这个
方法:该方法返回包含集合中所有元素的数组,数组的运行时类型为指定的数组(该方法的参数)。如

果该集
合能填充进传入的数组(大小足够)就返回该数组,否则就重新分配一个大小为集合的大小,运行时类型

为指定
数组的类型的数组。如果传入的数组比该集合大,那么将在填充完集合中的元素后再在数组中按顺序添

加一个
null。
在我们的第二个调用我们传入了一个长度为0的TestObj数组,很显然它的长度小于集合的大小,因此该

方法就
重新分配了一个大小合适类型为TestObj的数组,将集合元素填充进该数组后并返回。我们在接收到返回

值后,
虽然接口函数中它被定义为Object[],但实际上它的运行时类型为TestObj[],因此我们的转换才能成功



综上所述,
toArray()方法返回一个Object数组,该数组所含元素可以转换为对象本身的类型,但数组本身却不能,


为它的的确确是个Object类型的。
toArray(Object[])方法也返回一个Object数组,但该数组的运行时类型为参数指定的类型,可以转换为

对象本
身类型的数组。
toArray()等同于toArray(new Object[0])

在jdk1.5里由于支持了泛型,这两个方法的区别就很明显了。第二个方法将直接返回所指定的类型,无

需做转换。


这玩意是抄来的,加深影像,不怕他人狂骂我本是无赖...

分享到:
评论

相关推荐

    list.toArray方法

    上述代码中,`toArray()`方法会创建一个新的Object数组,然后将List中的所有元素复制到这个数组中。默认情况下,返回的数组类型是Object,但我们可以传入一个已经创建好的目标数组,指定返回数组的类型,如下所示: ...

    金陵科技学院软件工程学院大二上Java高级1200Collection.docx

    本文档主要讲解了如何使用`Collection`接口及其相关方法,以及如何使用`Iterator`遍历集合和进行操作。以下是文档中涉及的关键知识点: 1. **定义 Collection**: 在Java中,我们可以使用`ArrayList`或`HashSet`等...

    Java集合框架Collection接口.pdf

    Java集合框架(Java Collection Framework)是Java标准库中的一个重要组成部分,它提供了一系列用于存储和操作数据集合的接口和实现类。这些接口和类的设计遵循一致的原则和约定,使得开发者能够更高效地管理不同...

    Java 实例 - 集合转数组源代码+详细指导教程.zip

    这是因为Java的toArray()方法返回的是Object数组,而我们通常希望得到的是基本类型数组。 除了ArrayList,其他类型的集合如LinkedList、HashSet等也可以按照同样的方式进行转换。关键在于理解toArray()方法的用法和...

    php中的Collection集合类.zip

    11. **转换操作**:`toArray()`和`toJson()`等方法将集合转换为PHP数组或JSON格式。 12. **异常处理**:集合类可能还包括一些确保数据完整性和类型安全的机制,如抛出异常当非法操作发生时。 下载并使用这个"php中...

    JAVA中list,set,数组之间的转换详解

    从Collection转换为数组,可以调用`Collection.toArray()`方法。这个方法有两重载版本,一个不接受参数,返回一个Object数组;另一个接受一个已初始化的目标数组,如果目标数组长度不够,会自动创建一个新的数组。...

    collection接口方法[归类].pdf

    Collection接口作为集合框架的基础,定义了许多用于管理和操作数据的基本方法。下面将详细介绍这些方法及其在实际开发中的应用。 1. `public boolean add(E e)`:此方法用于向集合中添加一个元素。如果集合允许该...

    解决Laravel5.5下的toArray问题

    在`vendor/laravel/framework/src/Illuminate/Support/Collection.php`文件中的`toArray`方法下,作者加入了`getList`方法,其具体实现是通过`array_map`和`get_object_vars`函数将集合中的每个对象的属性转换为数组...

    Collection类(集合类

    // 集合元素个数:3 /* public Object[] toArray():把集合中的元素,存储到数组中。 */ Object[] arr = coll.toArray(); for (Object obj : arr) { System.out.println(obj); } // 输出:张三 // 李四 // ...

    认识类集、Collection接口

    本文将深入探讨`Collection`接口,它是所有类集的基础,以及与之相关的Java类和接口。 `Collection`接口位于`java.util`包下,是Java集合框架的顶级接口。它定义了存储、操作和遍历对象的基本方法。`Collection`...

    Collection接口中的常用方法

    `Object[] toArray(Object[] a)` 将集合转换为指定类型的数组。如果指定的数组足够大来容纳集合中的所有元素,则返回该数组;如果指定的数组太小,则创建一个新的数组,并返回它。这是一个非常实用的方法,尤其在...

    Java集合与数组区别简介及相互转换实例

    Java集合(Collection)和数组(Array)是Java语言中两种常用的数据存储结构,它们之间存在着一定的区别和联系。本文将主要介绍Java集合与数组的区别简介及相互转换实例,以便读者更好地理解和应用它们。 一、数组...

    Java中的类型Typenava)1

    当查询旧的Java代码时,可能会遇到误报,比如由于使用了`Collection.toArray(T[])`方法产生的结果。在不使用泛型的代码中,这个方法可能导致强制转换,因为返回的`Object[]`数组可能与传入的数组类型不匹配。 总的...

    linq.js文件,附官方说明

    **json2.js** 文件则是一个JSON(JavaScript Object Notation)的解析和序列化库,尤其适用于那些不支持原生JSON的旧版浏览器。它允许你在JavaScript中处理JSON格式的数据,这对于与服务器交换数据非常有用,因为...

    集合(Collection)文档

    - `Object[] toArray()`: 将集合转换为数组形式。 #### 常用集合类介绍 根据容器的具体实现和特性,Java中的集合可以进一步分为`List`、`Set`和`Map`三大类。 - **List**: 有序且可以包含重复元素的集合。常见的...

    java ArrayList的使用与分析

    - **ToArray 方法**:将 ArrayList 转换为数组:`Object[] array = list.toArray();` 4. **ArrayList 与数组的转换** - **转换为数组**:如示例所示,可以使用 `toArray` 方法将 ArrayList 转换为数组:`Int32[] ...

    Java软件开发实战 Java基础与案例开发详解 11-2 Collection接口 共9页.pdf

    通过上述内容的学习,我们可以了解到`Collection`接口及其相关子接口(如`List`和`Set`)在Java集合框架中的重要作用。同时,我们也学习了如何使用这些接口来创建不同类型的集合,并掌握了如何通过迭代器来遍历集合...

    java中List的用法和实例详解

    在Java编程语言中,List接口是集合框架的重要组成部分,它属于Collection接口的子接口。List接口主要用于存储有序的、可重复的元素序列。与Set不同,List允许元素重复,并且保持插入时的顺序。本篇将详细介绍Java中...

    jdk源码阅读Collection详解

    了解Collection接口的源码实现,可以帮助我们更好地理解Collection接口的方法和实现类。 在实际开发中,我们可以根据需要选择合适的Collection实现类来实现相应的功能。例如,如果我们需要实现一个有序的集合,可以...

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

    CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 ...// c.toArray might (incorrectly) not return Object[] (see 6260652) if (elementData.getClass() !

Global site tag (gtag.js) - Google Analytics