`
codsoul
  • 浏览: 212484 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

ArrayList.toArray()的用法

 
阅读更多
ArrayList.toArray()的用法
  当使用ArrayList时,有时想获得一个实际的数组,这个数组包含了列表的内容。   可以通过调用方法toArray()来实现。   
示例:   
package bo;   
import java.util.ArrayList;   
public class ToArrayTest {   
/**   * @param args   */   
public static void main(String[] args) {   
// TODO Auto-generated method stub   
ArrayList<Integer> al = new ArrayList<Integer>();   
al.add(new Integer(1));   
al.add(new Integer(2));   
al.add(new Integer(3));   
al.add(new Integer(4));   
al.add(new Integer(5));   
System.out.println("al中元素:" + al);   
//获得数组   
Object ia[] = al.toArray();   
//遍历数组   
for(int i=0; i<ia.length; i++){   
System.out.println(ia[i] + " ");   
}          
}   
}   



运行结果:   al中元素:[1, 2, 3, 4, 5]   1   2   3   4   5  




List提供了toArray()的方法,但是要使用不好,就会有ClassCastException异常究竟这个是如何产生的,且看代码:   

首先咱们来看看下面的代码:   
ArrayList<String []> arr = new ArrayList<String []>();   
arr.add(new String[]{"a","b"});   
arr.add(new String[]{"c","d"});   
String [][] str_a = (String[][]) arr.toArray();

//这几行代码会有ClassCaseException异常   
执行上面这几行代码 会有ClassCaseException异常   
咱们再来看下面几行代码:   

ArrayList<String []> arr = new ArrayList<String []>();   
arr.add(new String[]{"a","b"});   
arr.add(new String[]{"c","d"});   
String [][] str_a = (String[][])
arr.toArray(new String[0][0]);   

执行上面的代码就完全OK了   会抛java.lang.ClassCastException。   

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

public Object[] toArray() {   
return Arrays.copyOf(elementData, size);   
}   

public <T> T[] toArray(T[] a) {   
if (a.length < size)   
// Make a new array of a's runtime type, but my contents:   
return (T[])
Arrays.copyOf(elementData, size, a.getClass());   
System.arraycopy(elementData, 0, a, 0, size);   
if (a.length > size)   
a[size] = null;   return a;   
}   


可以看出,不带参数的toArray()方法,是构造的一个Object数组,然后进行数据copy,此时进行转型就会产生ClassCastException   

而带参数的toArray(T[] a) 方法,则是根据参数数组的类型,构造了一个对应类型的,长度跟ArrayList的size一致的空数组,虽然方法本身还是以 Object 数组的形式返回结果,不过由于构造数组使用的ComponentType跟需要转型的ComponentType一致,就不会产生转型异常   



正确的方式   
1. String[][] str_a = (String [][]) arr.toArray(new String[0][0]);   2. String[][] a = new String[<size>][size];   
String [][] str_a = (String [][]) arr.toArray(a);   

这里要注意的是:你要是传入的参数为9个大小,而list里面有5个 object ,那么其他的四个会是 null , 使用的时候要注意。
分享到:
评论

相关推荐

    list.toArray方法

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

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

    Java ArrayList 类中的 `toArray(T[])` 方法的参数类型使用 `T` 而不是 `E`,这在初看之下似乎违背了泛型的主要目的——提供类型安全。然而,这样的设计实则是为了增加代码的灵活性和实用性。让我们深入探讨一下其中...

    java中数组列表ArrayList的使用.doc

    Java 中数组列表 ArrayList 的使用 ArrayList 是 Java 中的一种...此外,ArrayList 还有很多其他的方法和属性,例如 Clear、Contains、IndexOf 等,大家可以查看 MSDN,了解更多关于 ArrayList 的使用方法和技巧。

    Java中ArrayList类的用法.pdf

    同时,你可以通过`Add`方法连续添加元素,或者通过`ToArray`方法将ArrayList转换为特定类型的数组: ```java for (int i = 0; i ; i++) list.add(i + 20); Int32[] values = (Int32[])list.toArray(new Int32[0]);...

    arraylist用法

    `ToArray`方法可以将`ArrayList`转换为数组。需要注意的是,转换时必须指定目标数组的类型,否则会导致类型不匹配的异常。例如: ```csharp ArrayList list = new ArrayList(); list.Add(1); list.Add(2); ...

    Java中ArrayList类的用法.docx

    ### Java中ArrayList类的用法详解 #### 一、ArrayList的概念 `ArrayList`是Java集合...通过本文介绍的基本使用方法以及关键属性和方法,您可以更好地理解和使用`ArrayList`,以解决实际编程中的数据存储和管理问题。

    java中数组列表arraylist的使用.docx

    - `ToArray`方法:将`ArrayList`转换为数组。 #### 五、示例代码解析 以下是一些具体的示例代码: ```java // 创建并初始化ArrayList ArrayList&lt;Integer&gt; list = new ArrayList(); list.add(1); list.add(2); ...

    ArrayList深度剖析与简单实用

    若要使ArrayList在线程之间同步,可使用`ArrayList.Synchronized()`静态方法创建一个线程安全的包装实例。但要注意,这并不保证枚举操作的同步,枚举时仍需手动锁定。 - **Count属性和Capacity属性**:Count属性...

    java ArrayList的使用与分析

    - **转换为数组**:如示例所示,可以使用 `toArray` 方法将 ArrayList 转换为数组:`Int32[] values = (Int32[])list.toArray(new Int32[0]);` - **从数组创建 ArrayList**:`ArrayList list = new ArrayList...

    C#ArrayList用法

    需要注意的是,尽管使用此方法创建的`ArrayList`是线程安全的,但在进行枚举时仍然需要显式锁定`SyncRoot`属性以避免异常。 ##### 3. Count 和 Capacity 属性 - **Count**: 表示当前`ArrayList`中元素的数量,只读...

    C# 详细的解说了关于ArrayList的用法

    ArrayList本身不支持排序,但可以使用Sort方法配合IComparer接口或Array的Sort方法实现: ```csharp myList.Sort(); // 对可比较对象进行升序排序,否则会抛出异常 ``` 10. 转换为其他类型 ArrayList可以转换为其他...

    java中数组列表ArrayList的使用[归类].pdf

    下面将详细讨论ArrayList的使用、重要方法和属性,以及与数组之间的转换。 1. **ArrayList的基本概念** - ArrayList是一种动态数组,它允许我们在运行时动态地添加或删除元素,而无需预先知道数组的精确大小。 - ...

    java中ArrayList的用法

    1. 使用`toArray()`方法,它可以接受一个类型参数来决定返回数组的类型。 ```java ArrayList&lt;Integer&gt; list = new ArrayList(); list.add(1); list.add(2); Integer[] array = list.toArray(new Integer[0]); ...

    Java中ArrayList类的用法知识.pdf

    - 可以通过`ToArray`方法将ArrayList转换为数组,如示例所示,需要指定目标类型。 - 数组也可以转换为ArrayList,如`ArrayList list = new ArrayList(array);` 5. **线程安全与性能** - 默认情况下,ArrayList...

    Arraylist 的用法

    ### ArrayList的用法详解 #### 一、简介与特点 `ArrayList`是.NET框架中一个非常重要的类,属于`System.Collections`命名空间。正如标题所言,“ArrayList就是传说中的动态数组”,它实质上是对传统静态数组的一个...

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

    ArrayList与Array的区别概述  ArrayList 是数组的复杂版本。ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能。... 使用 Synchronized 方法可以很容易地创建 ArrayList 的同步

    List转换成String数组

    **方法一:使用toArray()方法** ```java List&lt;String&gt; list = new ArrayList(); list.add("a1"); list.add("a2"); // 使用toArray()方法,传入一个大小等于list.size()的String数组 String[] toBeStored = list....

    ArrayList源码分析.docx 等

    为了解决这个问题,可以使用 `Collections.synchronizedList` 将 ArrayList 包装成线程安全的列表,但请注意,这种方法只保证了基本的线程安全性,对于迭代操作仍然需要额外的同步措施。 面试中,ArrayList 通常会...

Global site tag (gtag.js) - Google Analytics