数组和集合的转换

本文详细介绍了Java中集合转换为数组及数组转为集合的方法。重点讲解了List的toArray()方法的两种形式及其注意事项,避免ClassCastException错误。同时,介绍了如何使用Arrays.asList()将数组转换为集合,包括返回固定大小的集合和可变大小的集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)集合转换为数组

这个方法有两种形式:toArray() 和 toArray(T[] a)

前一种是返回值是一个Object的数组,Object[],这个数组是不可以进行强制数据转换的。有很多人会在这里吃苦头,因为他们会这样写:

Integer[] t=(Integer[])test.toArray();

比如:

List<Integer> test=new ArrayList<Integer>();

for(int i=0;i<5;i++){

  test.add(i);

}

Integer[] t=(Integer[])test.toArray();

 

这样进行强制数据转换的后果就是报错:

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

所以,像上面这种状况下,应该要使用的是第二种形式来转换数据。

toArray(T[] a)这个方法返回一个类T的数组。这个数组包含了List内全部的元素。

这个方法的特点就是,如果数组a的长度能够装下整个List的数据的时候,所有数据会放入到数组a当中。

如果数组a的长度不够长,那么就会返回一个数组。

也就是说使用的形式有两种:

List<Integer> test=new ArrayList<Integer>();

for(int i=0;i<5;i++){

    test.add(i);

}

Integer[] t=new Integer[test.size()];

test.toArray(t);//第一种

Integer[] t3=new Integer[1];

Integer[] t2=test.toArray(t3);//第二种

如上,t和t2都是返回的数组。

最后也不免要提醒一下,转换之前不要忘记确认List内的元素是不是都可以被转换成你希望的类型,如果本身数据类型就不符合那么也就白忙活了。一定要注意集合里面的对象,比如我之前就犯过错误,集合中明明存的是Map,new了一个Person[],会抛出异常信息,貌似copy...

以上内容来源:http://www.javaeerun.com/jr_1398514189829.html

(2)数组转为集合

Arrays.asList() 方法进行转换

测试代码:
package myProject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Test4 {

 public static void main(String[] args) {
  Test4 t = new Test4();
  List list1 = t.array2FixSizeList();
  List list2 = t.array2NormalList();
  String[] arr = t.list2Array();
//     list1.add("4");
//     list2.add("4");
  
//     for (Object object : list2) {
//     System.out.println(object);
//     }
  for (String string : arr) {
   System.out.println(string);
  }
 }
 
 /**
  * Arrays.asList返回固定大小的集合
  * @return
  */
 public List array2FixSizeList() {
  String[] strArr = {"1","2","3"};
  List list = (List) Arrays.asList(strArr);
  return list;
 }
 
 /**
  * Arrays.asList返回固定大小的集合,
   通过ArrayList的构造方法让其长度可以变化 *
@return */ public List array2NormalList() { String[] strArr = {"1","2","3"}; List list = new ArrayList((List) Arrays.asList(strArr)); return list; } /** * 集合转换为数据 * * @return */ public String[] list2Array(){ List list = new ArrayList(); list.add("1"); list.add("2"); String[] tmpArr = new String[list.size()]; String[] arr = (String[]) list.toArray(tmpArr); return arr; } }

 

转载于:https://www.cnblogs.com/ClearX/p/5479125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值