Java中list转成数组的方法 java.util.List.toArray()
Java中list转成数组的方法 java.util.List.toArray()
YuanyuanL 发表于2年前
Java中list转成数组的方法 java.util.List.toArray()
  • 发表于 2年前
  • 阅读 268
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

   Java中list转成数组,有一个方法 java.util.List.toArray(),他在使用中常遇到的几种情况如下:  

  1.错误的方式

private void onButtonListToArrayClick() 
{  
    // Array--->List  
    String[] strArray = new String[] { "aa", "bb" };  
    List<String> list = new ArrayList<String>(Arrays.asList(strArray));  
    list.add("cc");  
    // List--->Array  
    String[] strArray2;  
    try
    {  
        strArray2 = (String[]) list.toArray();  
    } catch (Exception e) 
    {  
        Log.i("ToArray", "failure:" + e.getMessage());  
    } 
}

异常发生,原因为list.toArray()返回的是Object类型,强制转换的时候发生ClassCastException。


2.正确的方式

private void onButtonListToArrayClick() 
{  
    // Array--->List  
    String[] strArray = new String[] { "aa", "bb" };  
    List<String> list = new ArrayList<String>(Arrays.asList(strArray));  
    list.add("cc");  
    // List--->Array  
    String[] strArray2 = null;  
    try 
    {  
        strArray2 = list.toArray(new String[0]);  
    } catch (Exception e) 
    {  
        Log.i("ToArray", "failure:" + e.getMessage());  
    }  
    for (String element : strArray2) 
    {  
        Log.i("ToArray", "strArray2:" + element);  
    }  
}

运行得到结果:aa和bb。

上面的方法

strArray2 = list.toArray(new String[0]);

与下面的方法一样

strArray2 = new String[list.size()];  
strArray2 = list.toArray(strArray2);


3.toArray()两种是方法发源码比较:

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

public Object[] toArray()
{   
   Object[] result = new Object[size];     
   System.arraycopy(elementData, 0, result, 0, size);     
   return result;   
}
public Object[] toArray(Object a[]) 
{     
if (a.length < size)         
a = (Object[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size); 
System.arraycopy(elementData, 0, a, 0, size);     
if (a.length > size)         
a[size] = null;     
return a;   
}

①不带参数的toArray方法,是构造的一个Object数组,然后进行数据拷贝,此时进行转型就会产生ClassCastException 

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


共有 人打赏支持
YuanyuanL
粉丝 145
博文 204
码字总数 181967
×
YuanyuanL
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: