數組轉list的坑-UnsupportedOperationException

    數組轉list,jdk提供了方法,就是有點美中不足,不可變。如果要可變,返回的list,得new下。先上代碼:

    

@Test
public void booleanExpression() {
    Integer[] arr = {1,2,3,4,5};
    log.info("---arr:{}",JSONObject.toJSONString(arr));
    List<Integer> list = Arrays.asList(arr);
    try {
        list.add(123);
        log.info("---asList:{}",JSONObject.toJSONString(list));
    }catch (Exception e){
        log.error("--Arrays.asList出來的list直接add報錯:{}",e.getMessage());
    }

    log.info("-------------");
    List<Integer> colList = Arrays.stream(arr).collect(Collectors.toList());
    colList.add(6);

    log.info("---jdk1.8的Arrays轉化數組爲可編輯list:{}",JSONObject.toJSONString(colList));

    log.info("-------------");
    List<Integer> colLs = new ArrayList<>();
    CollectionUtils.mergeArrayIntoCollection(arr,colLs);
    colLs.add(7);
    log.info("----CollectionUtils工具類轉化數組爲list:{}",JSONObject.toJSONString(colLs));

}

這個測試方法裏,數組轉list的正確姿勢就是下面的2種,一種是jdk1.8的stream利用,一種是工具類。其實我是建議使用工具類的,畢竟不用太關注輪子以下是這麼造的。

當然一般情況下,如果僅僅只是轉化個集合類型,進行循環操作,不變更循環本身,直接asList還是可以的,這樣的好處時間對內存消耗會小點,畢竟創建不可變的集合,不用考慮負載因子等。

說明下,工具類的直接CollectionUtils.arrayToList()也是創建的不可變的集合,跟jdk的asList一樣,底層源碼一致。現在jdk免費的只能到1.8,不知道後面的jdk會不會直接提供可變的轉換方法。

 

發佈了84 篇原創文章 · 獲贊 16 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章