`

Collection的toArray()使用上需要注意的地方

 
阅读更多
Collection在很多情况下需要转换为数组来处理(很多接口方法都使用array作为参数)。
Collection的toArray()方法返回的Object[],是不能被强制转换为子元素类型的
例如:
List l=new ArrayList();
l.add("a");
l.add("b");
String[] strs=(String[])l.toArray();//throw ClassCastException

通常的做法是:
String[] strs=new String[l.size()];
l.toArray(strs);

toArray(T[] a)方法有个比较怪异的地方:
List l=new ArrayList();   
l.add("a");   
l.add("b");   
String[] strs=new String[4];//比List多2个元素   
for(int i=0;i<strs.length;i++){//填充4个字符串"x”   
     strs[i]="x";   
}   
String[] newStrs=(String[]) l.toArray(strs);
System.out.println(newStrs==strs);//为了确定是否传入的参数对象和返回的是同一个对象。
for(int i=0;i<strs.length;i++){   
   System.out.println(strs[i]);   
}

得到的结果是:
  • true
  • a
  • b
  • null
  • x

JAVA API文档的说明:
引用
toArray
<T> T[] toArray(T[] a)返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将根据指定数组的运行时类型和此 collection 的大小分配一个新数组。
如果指定的数组能容纳 collection 并有剩余空间(即数组的元素比 collection 的元素多),那么会将数组中紧跟在 collection 末尾的元素设置为 null。(这对确定 collection 的长度很有用,但只有 在调用方知道此 collection 没有包含任何 null 元素时才可行。)

如果此 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。

像 toArray 方法一样,此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许在输出数组的运行时类型上进行精确控制,并且在某些情况下,可以用来节省分配开销。

假定 l 是只包含字符串的一个已知 List。以下代码用来将该列表转储到一个新分配的 String 数组:

     String[] x = (String[]) v.toArray(new String[0]);
注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。


参数:
a - 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。
返回:
包含此 collection 元素的数组
抛出:
ArrayStoreException - 指定数组的运行时类型不是此 collection 每个元素运行时类型的超类型。
NullPointerException - 如果指定的数组为 null。
2
0
分享到:
评论

相关推荐

    list.toArray方法

    这就需要用到toArray()方法。 `toArray()`方法的基本用法如下: ```java List&lt;String&gt; list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); // 调用toArray()方法,返回一个Object数组 Object...

    Collection使用

    在IT领域,尤其是在软件开发与数据库管理中,对Collection的使用是至关重要的。Collection作为Java集合框架中的核心接口,提供了一种存储和操作多个对象的方式,它包括List、Set、Queue等子接口,以及实现这些接口的...

    Array和Collection相互转换以及copy深度的小测

    这里需要注意,如果数组大小不足,`toArray()`会创建一个新的数组。 **复制深度** 在进行转换时,我们还需要考虑复制的深度。如果数组或集合中的元素是复杂类型(如对象),那么我们是在进行深拷贝还是浅拷贝? ...

    php中的Collection集合类.zip

    请注意,使用任何外部类库之前,都需要确保其来源可靠,并且与项目的其他依赖兼容。此外,务必阅读并理解类库的文档,以便正确、安全地使用其中的方法和功能。在实际开发中,还应考虑性能优化,避免无谓的内存消耗和...

    php中的Collection集合类

    `Collection`类的使用可以提高代码的可读性和可维护性。例如,在处理数据库查询结果时,可以将结果集包装成`Collection`,然后进行各种操作,如分组、排序、计算等。此外,`Collection`还常用于ORM(对象关系映射)...

    Laravel开发-laravel-collection

    2. **基本属性与方法**: Collection对象是迭代器,可以使用`foreach`循环遍历。它也支持计数、空检查等基本操作,如`count()`, `isEmpty()`, `isNotEmpty()`。 **二、Collection的转换操作** 3. **Map & Pluck**: ...

    集合(Collection)文档

    ### 集合(Collection)文档知识点...通过上述内容,我们深入了解了Java集合框架中`Collection`接口及其常用实现类的关键特性与使用方法。这些知识点对于开发人员来说至关重要,能够帮助他们更加高效地管理和操作数据。

    Collection接口中的常用方法

    需要注意的是,如果集合中不存在该元素,则不会发生任何改变。 #### 3. `int size()` 返回集合中元素的数量。这是一个基本的统计方法,用于获取集合的大小。 #### 4. `boolean isEmpty()` 判断集合是否为空。...

    解决Laravel5.5下的toArray问题

    通常,在使用查询构建器时,开发者会使用`DB::table()-&gt;get()-&gt;toArray()`这样的链式调用,将结果集转化为数组。但是,有时候开发者可能对结果集的数组格式有特别的需求。 本文作者是一位对ThinkPHP框架有较深了解...

    Java基础知识-day02【Collection、泛型】.pdf

    本节课程主要讲解了 Java 中的 Collection 框架和泛型,涵盖了 Collection 的基本概念、Collection 框架的继承结构、Collection 的常用功能、迭代器的使用和泛型的定义等知识点。 Collection 框架是 Java 中提供的...

    Collection、Map、List、Set、Iterator

    ### Collection、Map、List、Set、...以上就是关于 `Collection`、`Map`、`List`、`Set` 和 `Iterator` 的详细解析,这些概念和类是 Java 编程中非常基础且重要的部分,掌握它们有助于更好地理解和使用 Java 集合框架。

    Java集合框架Collection接口.pdf

    - 在需要进行基本的集合操作时,如添加、删除、查询等,使用`Collection`接口即可满足需求。 #### 四、Collection接口的方法详解 `Collection`接口提供了多个方法来实现集合的基本功能: 1. **add(Object obj)**...

    java集合Collection总结

    7. **集合转换(Collection to Array and vice versa)**:Arrays类提供了静态方法如toArray()将集合转换为数组,而ArrayList的构造函数则可以接受数组创建一个新的列表。 8. **并发集合(Concurrent Collections)**:...

    Tedu一段Java集合Collection

    需要注意的是,通过这种方式转换得到的`List`集合是数组的视图,对`List`的修改会影响到原始数组。 以上就是关于“Tedu一段Java集合Collection”的详细知识点介绍,包括集合的基本概念、集合框架、`Collection`接口...

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

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

    jdk源码阅读Collection详解

    在实际开发中,我们经常需要使用Collection接口的方法来操作集合。例如,我们可以使用add()方法向集合中添加元素,使用remove()方法从集合中移除元素,使用contains()方法判断集合是否包含元素等。 Collection接口...

    关于List.ToArray()方法的效率测试

    总的来说,`List&lt;T&gt;.ToArray()` 方法虽然方便,但在处理大量数据时要注意其潜在的性能影响。在性能敏感的场景下,应谨慎使用,并考虑上述优化策略。此外,持续关注和学习.NET框架的底层实现,可以帮助我们更好地理解...

    Java容器框架 collection集合

    ### Java容器框架 Collection集合 #### 一、基本概念 Java容器类库主要目的是为了存储对象,根据不同的数据结构,可以将其划分为两个主要的概念:**Collection** 和 **Map**。 - **Collection**:这是一个单一...

    jQuery学习笔记之toArray()

    因此,当你需要对jQuery对象执行数组特有的操作时,`toArray()`就派上用场了。 在jQuery的源码中,`toArray()`方法实际上是一个巧妙的技巧。它并没有直接创建一个新的数组,而是借用并调用了JavaScript数组的`slice...

Global site tag (gtag.js) - Google Analytics