成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 中 ,Arrays 轉 List 的那些坑

開發 開發工具
如果有對于一些 Array 到 List 轉換的需要的話,可能就需要用到 Arrays 這個類,它除了提供一些對數組的排序和搜索等操作之外,還提供了一些從 Array.asList() 這個非常方便的將 Array 轉為 List 的 Api ,但是它使用起來也有一些需要注意的地方。

 一、前言

如果有對于一些 Array 到 List 轉換的需要的話,可能就需要用到 Arrays 這個類,它除了提供一些對數組的排序和搜索等操作之外,還提供了一些從 Array.asList() 這個非常方便的將 Array 轉為 List 的 Api ,但是它使用起來也有一些需要注意的地方。

本篇就簡單介紹一下使用 Arrays 的一些注意事項。

二、需要注意什么

1、asList() 無法將基本類型轉換為List

asList() 可以將一個數組轉換為我們需要的 List。但是如果這個數組是一個基本數據類型的話,就會出現問題。

舉個例子:

最終輸出的結果是:

  1. I/cxmyDev: list size : 1 

這個結果和我們的預期是不符合的,先來看看 asList() 的實現源碼。

可以看到 asList() 是接受一個泛型的變長參數的,而基本數據類型是無法被泛型化的。而對于泛型而言,基本數據類型,實際上會被人為是一個 [x 的類型。 [ 表示這是一個數組,x 為當前數組的類型。例如: int[] 實際上它的類型是 [I 。

舉個例子來說明問題。

  1. I/cxmyDev: list size : 1 
  2. I/cxmyDev: list.get(0) class : [I 
  3. I/cxmyDev: list type : true 

可以看到,確實與前面介紹的一致。

所以,得出的結論就是,8 種基本數據類型,不能被用在方法的泛型變長參數中,否者會被人為是一個 [X 類型的參數,而不是可變長參數。

有時候又需要對這些基本數據類型進行操作,這個時候,就可以使用基本數據類型的包裝類。

簡單改寫一個上面的 Demo。

再來看看輸出的結果,驗證結果。

  1. list size : 6  
  2. I/cxmyDev: list.get(0) class : java.lang.Integer  
  3. I/cxmyDev: list type :false 

這樣使用,就和我們的預期是一樣的了。

2、asList() 返回的列表是不可變的

前面看了 asList() 的方法簽名,可以發現,它返回的是一個 ArrayList 。但是,需要注意的是,這個 ArrayList ,并不是我們經常使用的 ArrayList ,我們經常使用的 ArrayList 是屬于java.util 包下面的,而 asList() 返回的只是 Arrays 的一個內部類。

雖然他們同為 ArrayList 但是從實現和文檔上都可以看到,Arrays.ArrayList() 是一個不可改變的 List。它雖然也是繼承自 AbstractList ,但是它只實現了一部分方法,并沒有實現其中的 add() 、remove() 等用于操作 ArrayList 的方法。

例如上面的代碼,想在 asList() 返回的List 中,再插入一條數據,將會拋出UnsupportedOperationException 這個異常。

UnsupportedOperationException 這個異常,是在 AbstractList.add() 方法中拋出的。

可以看到,如果繼承了 AbstractList 而不去實現它對應的方法,調用就會拋出此異常。

如果需要使用 asList() 方法的話,就需要確保轉換出來的 List 將不會再被修改,否者會拋出異常。

而如果想對 Arrays.asList() 轉換的 ArrayList 做操作,就需要再一次對其進行轉換。

三、小結

Arrays.asList() 使用的坑基本上都已經說清楚了,并且也提供了解決的辦法。

【本文為51CTO專欄作者“張旸”的原創稿件,轉載請通過微信公眾號聯系作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2022-05-15 08:13:50

Mysql數據庫Mycat

2020-05-28 16:15:50

HTTP暗坑前端

2015-04-13 17:39:11

移動IM開發

2017-07-19 14:26:01

前端JavaScriptDOM

2021-09-07 14:35:48

DevSecOps開源項目

2020-04-21 15:18:11

財務信息化

2015-03-12 09:51:09

CoreDataiCloud

2018-07-30 16:18:51

容災備份

2017-03-31 10:27:08

推送服務移動

2017-07-06 11:41:48

CIOIT技術

2013-04-12 15:59:33

2016-12-28 13:19:08

Android開發坑和小技巧

2011-12-15 09:45:21

PhoneGap

2011-12-22 19:57:38

PhoneGap

2018-02-06 08:36:02

簡歷程序員面試

2017-08-28 15:30:49

Android編碼器編碼

2018-07-05 06:02:38

綜合布線弱電動力線

2023-09-22 11:29:11

JavasubList

2018-03-30 09:21:30

程序員網絡招聘

2017-06-21 08:39:20

SparkScalaHDFS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产真实精品久久二三区 | 欧美在线 | 久久精品国产清自在天天线 | 日韩成人免费视频 | 日韩一区二区在线视频 | 欧美日韩综合视频 | 性高朝久久久久久久3小时 av一区二区三区四区 | 亚洲中国字幕 | 精品在线看| 国产精品视频二区三区 | 久久久久久久综合 | 欧美日韩亚洲一区 | 天天射天天干 | 电影午夜精品一区二区三区 | 日韩av在线一区二区 | 欧美日韩精品在线免费观看 | 亚洲天堂一区 | 毛片一区二区 | 亚洲精品国产一区 | 天天干天天爱天天操 | 91社区在线高清 | pacopacomama在线| 在线观看国产www | 97在线超碰 | 五月天婷婷激情 | 久久久久久久久久久久一区二区 | 午夜精品 | 成年网站在线观看 | 亚洲黄色片免费观看 | 91在线免费视频 | 天天躁人人躁人人躁狂躁 | 欧美一级高潮片免费的 | 成人国产精品入口免费视频 | 成人在线精品 | 亚洲一区二区三区在线免费 | 国产精品美女久久久久久不卡 | 精品国产乱码久久久久久1区2区 | av片网 | 久久久久亚洲精品 | 中文字幕视频三区 | 日韩精品一区二区三区视频播放 |