1. 程式人生 > >Java中List與數組互相轉化

Java中List與數組互相轉化

obj arrays 原因 apple span value 大小 無法 運行時

問題的提出:

今天在完成一個小功能的時候,需要把存放在List中的數據轉化成字符串數組。
想當然地用了List的一個方法toArray(),它的返回值是Object[]類型,於是用強制類型轉換。代碼如下:

public static String[] getDictValueList(String type){
        List<Dict> DictList = getDictList(type);
        List<String> DictValue = new ArrayList<>();
        for (Dict dict : DictList){
            DictValue.add(dict.getLabel());
        }
            return (String[])DictValue.toArray();
    }

結果它報錯了Ljava.lang.Object; cannot be cast to [Ljava.lang.String;這個錯誤看起來有點奇怪,不知道前面的L和半個方括號是什麽意思。

原因:

類型不匹配。

toArray()是一個抽象方法,返回Object[]類型,沒有泛型,無法強轉成String[]類型。要想讓它返回對應的類型可以使用它的重載方法: <T> T[] toArray(T[] a);

解決辦法:

  1. List轉換成為數組。(這裏的List是實體是ArrayList)
    調用ArrayList的toArray方法。
    public <T> T[] toArray(T[] a)
    返回一個按照正確的順序包含此列表中所有元素的數組;返回數組的運行時類型就是指定數組的運行時類型。如果列表能放入指定的數組,則返回放入此列表元素的數組。否則,將根據指定數組的運行時類型和此列表的大小分配一個新的數組。
    所以我以上的返回代碼修改為:
    return  DictValue.toArray(new String[DictList.size()]);
  2. 數組轉換成為List
    調用ArraysasList方法
    .public static <T> List<T> asList(T... a)
    返回一個受指定數組支持的固定大小的列表。(對返回列表的更改會“直寫”到數組。)此方法同 Collection.toArray 一起,充當了基於數組的 API 與基於 collection 的 API 之間的橋梁。
    此方法還提供了一個創建固定長度的列表的便捷方法,該列表被初始化為包含多個元素:
    List stooges = Arrays.asList("Larry", "Moe", "Curly");
    具體用法:
    String[] arr = new String[] {"1", "2"};
    List list = Arrays.asList(arr);

Java中List與數組互相轉化