`

List.toArray的正确使用

 
阅读更多

在程序中,往往得到一个List, 程序要求对应赋值给一个array,   可以这样写程序:   

for example:   

Long [] l = new Long[list.size()];
for(int i=0;i<list.size();i++){
	l[i] = (Long) list.get(i);
}

 

 

  

要写这些code,似乎比较繁琐,其实List提供了toArray()的方法,但是要使用不好,就会有ClassCastException   究竟这个是如何产生的,且看代码:  

-----------------------------------------------------------------------------------   

List list = new ArrayList(); 
list.add(new Long(1));
list.add(new Long(2));
list.add(new Long(3));
list.add(new Long(4));   
Long[] l = (Long[])list.toArray();// 代码会抛java.lang.ClassCastException。  
for(int i=0; i<l.length; i++)   
  System.out.println(l[i].longValue());

    

-----------------------------------------------------------------------------------    

当然,为了读出值来,你可以这样code:   

-----------------------------------------------------------------------------------   

Object [] a = list.toArray();   
for(int i=0;i<a.length;i++)
  System.out.println(((Long)a[i]).longValue()); 

   

-----------------------------------------------------------------------------------   

但是让数组丢失了类型信息,这个不是我们想要得。哭正确使用方式:  

-----------------------------------------------------------------------------------   

Long[] l = new Long[];    
list.toArray(l);   
Long[] l = (Long []) list.toArray(new Long[0]); 
Long [] a = new Long[];   
Long [] l = (Long []) list.toArray(a);

    

-----------------------------------------------------------------------------------   

java sdk doc 上讲:   

public Object[] toArray(Object[] a)   

a--the array into which the elements of this list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.   

如果这个数组a足够大,就会把数据全放进去,返回的数组也是指向这个数组;  

要是不够大,就申请一个跟参数同样类型的数组,把值放进去,然后返回。  

注意的是:你要是传入的参数为9个大小,而list里面有5个object,那么其他的四个很可能是null , 使用的时候要注意。

 

分享到:
评论

相关推荐

    list转换成string数组

    如果不确定列表的大小或者想要更简洁的代码,可以直接传递一个空的`String`数组给`toArray`方法,Java会自动创建一个正确大小的数组。 ```java import java.util.ArrayList; import java.util.Arrays; public ...

    String[] list 相互转化

    要将一个 `List` 对象转换成 `String[]` 数组,可以使用 `List` 的 `toArray` 方法。此方法允许传入一个指定类型的数组作为参数,并返回一个包含列表元素的新数组。需要注意的是,传入的数组类型必须与期望的输出...

    java List、Set与Array之间的相互转换

    - **List转Array**: 要将List转换回Array,你可以使用`toArray()`方法。首先,你需要创建一个目标类型的空数组,然后调用`toArray()`方法传入这个数组。例如: ```java String[] newArray = new String[list.size...

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

    ### Java中数组列表ArrayList的使用详解 #### 一、ArrayList简介 `ArrayList`是Java集合框架中的一个重要组成部分,属于`List`接口的一种实现。...在Java开发中,正确理解和使用`ArrayList`是非常重要的。

    JAVA的多条件模糊查询

    通过上述示例我们可以看到,在Java中实现多条件模糊查询并不复杂,关键在于动态构建SQL语句以及正确使用`JdbcTemplate`进行参数绑定。当然,在实际项目中还可能涉及到更复杂的查询逻辑和更高级的异常处理策略。但...

    .Net Framework 各种类型转换方法

    3. **使用 `ToArray` 和 `ToList` 方法**:这些方法可以直接将集合转换为数组或列表: ```csharp List&lt;int&gt; list = new List(new int[] { 1, 2 }); int[] array = list.ToArray(); ``` 4. **多维数组到一维数组...

    vbnet_36进制数相加

    rtn = String.Join("", result_list.ToArray()) Return rtn.ToLower ``` #### 总结 以上就是关于如何使用VB.NET实现36进制数相加的一个具体示例。通过上述步骤,我们可以有效地处理不同长度的36进制数相加的问题...

    Unity3D中网格合并示例研究2

    只有当所有子网格使用的是同一材质时,设置为true才能正确合并。如果子网格材质不同,则应设置为false,保持子网格独立,以确保每个sub mesh的材质正确应用。 四、数组对应问题 在进行网格合并时,必须确保数组下标...

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

    关键在于理解toArray()方法的用法和正确地进行类型转换。 在详细指导教程中,你将看到更多关于这个过程的示例,以及如何在实际项目中应用这些知识。教程可能还会涵盖异常处理、空集合处理以及使用Java 8的流(Stream...

    java传list给存储过程,项目提取,不忽悠

    Java的`toArray()`方法可以实现List到数组的转换。 5. **设置参数**: 使用`CallableStatement`的`setObject()`方法为每个参数设置值,参数位置通常从1开始计数。对于List,需要遍历数组并逐个设置。 6. **执行...

    Java随机产生数组元素并无重复元素方法

    在Java编程中,生成一个包含不重复随机元素的数组是一个常见的需求,特别是在模拟、测试或者游戏开发等场景中。...例如,如果在多线程环境中,可能需要使用线程安全的数据结构或同步机制来确保正确性。

    Java集合List与Array的相互转换

    1. 将List转换为Array时,使用`toArray(T[] array)`方法,并传入目标类型的数组实例。 2. 将Array转换为List时,使用`Arrays.asList(T... a)`,但得到的List不支持修改操作。 3. 在处理`Arrays.asList()`返回的List...

    Java中List与数组相互转换实例分析

    在Java编程中,List和数组是两种常见的数据结构,它们各有特点,但有时我们需要在两者之间进行转换。...通过正确使用`toArray(T[] a)`方法和`Arrays.asList()`,可以有效地在List和数组之间进行安全转换。

    Java编程中常见的坑

    Integer[] array = list.toArray(new Integer[0]); ``` #### 5. `subList`的使用注意事项 `List.subList()`方法用于获取列表的一个视图。需要注意的是,这个视图与原始列表是关联的,任何对视图的修改都会影响到...

    IO2+泛型+集合.docx

    public static &lt;T&gt; T[] toArray(List&lt;T&gt; list) { return list.toArray((T[]) new Object[0]); } ``` 在这里,`&lt;T&gt;`是类型参数,代表一个未指定的类型,`T[]`表示返回值是一个T类型的数组。泛型的使用提高了代码的...

    使用math.net,最小二乘法进行平面拟合、3D线拟合,C#源码.zip

    // 假设points是一个包含三维数据点的List&lt;(double, double, double)&gt; var data = points.Select(p =&gt; Vector&lt;double&gt;.Build.Dense(new[] { p.Item1, p.Item2, p.Item3 })).ToArray(); // 平面拟合 var planeSolver...

    SUN Java Code Specification.rar_编码规范

    2. 避免使用`Collection.toArray()`:优先使用`toArray(T[] array)`,以避免创建不必要的数组。 3. 使用`List`而非`ArrayList`或`LinkedList`:在不确定具体实现需求时。 八、并发编程 1. 使用`synchronized`关键字...

    DataView中的数据导入Excel

    需要注意的是,使用Interop库与Excel交互可能会引发一些问题,如进程无法正常关闭、资源泄露等,因此在实际使用时应确保正确处理异常,并在操作完成后释放所有对象,避免内存泄漏。 此外,对于大型数据集,直接使用...

    DEV控件中的ComboBoxEdit控件如何绑定数据库中的数据

    comboCatalog.Properties.Items.AddRange(catalogList.ToArray()); } ``` ### 核心知识点三:使用绑定的数据 当用户选择了某个项后,可以通过`SelectedItem`属性获取所选的`CatalogInfo`对象。此时,我们可以轻松...

    Java笔记word.docx

    可以使用`List.toArray()`方法将列表转换为数组。 **示例**: ```java List&lt;String&gt; list = Arrays.asList("a", "b", "c"); String[] array = list.toArray(new String[0]); ``` #### 12. 参数类型转换 当接收到...

Global site tag (gtag.js) - Google Analytics