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 , 使用的时候要注意。
分享到:
相关推荐
`toArray()`方法的基本用法如下: ```java List<String> 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 的使用 ArrayList 是 Java 中的一种...此外,ArrayList 还有很多其他的方法和属性,例如 Clear、Contains、IndexOf 等,大家可以查看 MSDN,了解更多关于 ArrayList 的使用方法和技巧。
同时,你可以通过`Add`方法连续添加元素,或者通过`ToArray`方法将ArrayList转换为特定类型的数组: ```java for (int i = 0; i ; i++) list.add(i + 20); Int32[] values = (Int32[])list.toArray(new Int32[0]);...
`ToArray`方法可以将`ArrayList`转换为数组。需要注意的是,转换时必须指定目标数组的类型,否则会导致类型不匹配的异常。例如: ```csharp ArrayList list = new ArrayList(); list.Add(1); list.Add(2); ...
### Java中ArrayList类的用法详解 #### 一、ArrayList的概念 `ArrayList`是Java集合...通过本文介绍的基本使用方法以及关键属性和方法,您可以更好地理解和使用`ArrayList`,以解决实际编程中的数据存储和管理问题。
- `ToArray`方法:将`ArrayList`转换为数组。 #### 五、示例代码解析 以下是一些具体的示例代码: ```java // 创建并初始化ArrayList ArrayList<Integer> list = new ArrayList(); list.add(1); list.add(2); ...
若要使ArrayList在线程之间同步,可使用`ArrayList.Synchronized()`静态方法创建一个线程安全的包装实例。但要注意,这并不保证枚举操作的同步,枚举时仍需手动锁定。 - **Count属性和Capacity属性**:Count属性...
- **转换为数组**:如示例所示,可以使用 `toArray` 方法将 ArrayList 转换为数组:`Int32[] values = (Int32[])list.toArray(new Int32[0]);` - **从数组创建 ArrayList**:`ArrayList list = new ArrayList...
需要注意的是,尽管使用此方法创建的`ArrayList`是线程安全的,但在进行枚举时仍然需要显式锁定`SyncRoot`属性以避免异常。 ##### 3. Count 和 Capacity 属性 - **Count**: 表示当前`ArrayList`中元素的数量,只读...
ArrayList本身不支持排序,但可以使用Sort方法配合IComparer接口或Array的Sort方法实现: ```csharp myList.Sort(); // 对可比较对象进行升序排序,否则会抛出异常 ``` 10. 转换为其他类型 ArrayList可以转换为其他...
下面将详细讨论ArrayList的使用、重要方法和属性,以及与数组之间的转换。 1. **ArrayList的基本概念** - ArrayList是一种动态数组,它允许我们在运行时动态地添加或删除元素,而无需预先知道数组的精确大小。 - ...
1. 使用`toArray()`方法,它可以接受一个类型参数来决定返回数组的类型。 ```java ArrayList<Integer> list = new ArrayList(); list.add(1); list.add(2); Integer[] array = list.toArray(new Integer[0]); ...
- 可以通过`ToArray`方法将ArrayList转换为数组,如示例所示,需要指定目标类型。 - 数组也可以转换为ArrayList,如`ArrayList list = new ArrayList(array);` 5. **线程安全与性能** - 默认情况下,ArrayList...
### ArrayList的用法详解 #### 一、简介与特点 `ArrayList`是.NET框架中一个非常重要的类,属于`System.Collections`命名空间。正如标题所言,“ArrayList就是传说中的动态数组”,它实质上是对传统静态数组的一个...
ArrayList与Array的区别概述 ArrayList 是数组的复杂版本。ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能。... 使用 Synchronized 方法可以很容易地创建 ArrayList 的同步
**方法一:使用toArray()方法** ```java List<String> list = new ArrayList(); list.add("a1"); list.add("a2"); // 使用toArray()方法,传入一个大小等于list.size()的String数组 String[] toBeStored = list....
为了解决这个问题,可以使用 `Collections.synchronizedList` 将 ArrayList 包装成线程安全的列表,但请注意,这种方法只保证了基本的线程安全性,对于迭代操作仍然需要额外的同步措施。 面试中,ArrayList 通常会...