国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Arrays.asList這樣用是不對的

IT那活兒 / 2972人閱讀
Arrays.asList這樣用是不對的

點擊上方“IT那活兒”,關注后了解更多精彩內容!!!



 問題描述 


在開發中常常需要將數組轉為集合,在本次開發中就用到了Arrays.asList()方法將字符串轉為集合。然而向轉完之后的集合中添加元素、或者是改變集合結構,都會遇到圖中的問題,我一時間也是很懵逼。
一開始我為了排除其他是代碼的問題,于是寫個main方法專門對Arrarys.asList()方法進行測試。
結果如下,也是拋出了java.lang.UnsupportedOperationException異常信息。


 問題排查 


那么問題就來了:這是為啥呢?

我們順著Arrarys.asList()這個方法一層一層往里找吧!當進入這個方法時,首先我們可以看到方法第一行注釋:Returns a fixed-size list backed by the specified array
這行注釋的大概意思就是:此方法返回一個基于特定數組的固定大小集合。
再看看方法結構,方法的返回值是我們常見ArrayList。但是這個卻不是我們常用的那個Java.util包下的ArrayList。此處的ArrayList是Arrays類的一個內部類。
接著我們看到這個內部類也繼承了AbstractList類,但是只繼承部分方法,沒有我們常用的ArrayList類中的add()、remove()等方法。
所以當我們使用Arrarys.asList()聲明的集合去添加元素或者改變集合結構時,會拋出java.lang.UnsupportedOperationException異常。
此處可能也是對應了Returns a fixed-size list backed by the specified array這個注解,所以沒有寫入add等方法。
這樣常用的方法也是在不經意間才會發現問題,但只要深入研究一下,問題很快就能解決,畢竟讀源碼是一個好習慣


 解決方案 


此處,我使用了一個簡單的方式去解決這個問題,即使用流處理Collectors.toList()將對象轉換為java.util下ArrayList。功能正常使用,這樣簡單又方便。如下圖:


 總結 


雖然Arrays.asList方法不夠完美,但是處理一些對象轉換,使用我們常用的一些contains方法等都是不錯的選擇;
但是如add()/remove()/clear()等方法不能使用,只要是修改被Arrays.asList聲明的集合,就會報java.lang.UnsupportedOperationException異常。
這也給我們一個啟發,想要寫出質量高的代碼,寫的時候就得考慮的多一點。


本文作者:李偉業

本文來源:IT那活兒(上海新炬王翦團隊)


分享

收藏

點贊

在看

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129663.html

相關文章

  • JDK 1.8 新特性學習(Stream)

    摘要:會在數據源內部隱式的遍歷進行處理。會并行遍歷數據,將數據分成若干段,同時進行處理,最終匯總結果一起輸出。結束操作會觸發實際計算,計算發生時會把所有中間操作積攢的操作以的方式執行,這樣可以減少迭代次數。為函數式編程而生。 Stream實現了對數據源的流式處理,它可以并行操作,提高數據處理效率。 什么是流 流不是集合,它不對數據做保存,只是最數據進行算法處理,比如最大值,最小值,排序等操作...

    yhaolpz 評論0 收藏0
  • 千萬不要這樣使用 Arrays.asList !

    摘要:而一開始的設計時用于打印數組而設計的,但開始,有了另一個比較更方便的打印函數于是打印不再使用,而恰巧可用于將數組轉為集合。錯誤用法如果你這樣使用過,那你要注意下了。 使用Arrays.asList()的原因無非是想將數組或一些元素轉為集合,而你得到的集合并不一定是你想要的那個集合。 而一開始asList()的設計時用于打印數組而設計的,但jdk1.5開始,有了另一個比較更方便的打印函數...

    Nosee 評論0 收藏0
  • 《Java編程思想》-- 持有對象 -- 添加一組元素

    摘要:方法接受一個對象,以及一個數組或是一個用逗號分隔的列表,并將元素添加到中。工作的很好,因為他從第一個參數中了解到了目標類型是什么。 ArrayList.asList() 接受一個數組或是用逗號分隔的元素列表,也可以用可變參數,然后將其轉為一個List對象。 Collections.addAll()方法接受一個Collection對象,以及一個數組或是一個用逗號分隔的列表,并將元素添加...

    tomlingtm 評論0 收藏0
  • 《Java8實戰》-第五章讀書筆記(使用流Stream-01)

    摘要:跳過元素流還支持方法,返回一個扔掉了前個元素的流。歸約到目前為止,我們見到過的終端操作都是返回一個之類的或對象等。這樣的查詢可以被歸類為歸約操作將流歸約成一個值。通過反復使用加法,你把一個數字列表歸約成了一個數字。 使用流 在上一篇的讀書筆記中,我們已經看到了流讓你從外部迭代轉向內部迭代。這樣,你就用不著寫下面這樣的代碼來顯式地管理數據集合的迭代(外部迭代)了: /** * 菜單 ...

    OldPanda 評論0 收藏0
  • Java 8之stream進階

    摘要:獲取每個元素的字符串長度放入新流中,然后轉為類型。歸約歸約就是把整個流歸約成一個值的操作,比如求集合中最大的元素所有元素值的和之類的操作。 前言: 上一篇文章 Java 8之stream介紹和使用 中講解了stream的定義和用法,簡單介紹幾個最基本最常用的方法,其實stream還有更強大的功能,這篇文章就會給大家介紹stream的進階用法。 篩選: 在上一篇文章中我們介紹了使用fi...

    Jaden 評論0 收藏0
  • Java Arrays.asList()與Arrays.sort()分析

    摘要:與分析聲明文章均為本人技術筆記,轉載請注明出處示例源碼將數組或者指定個數的對象轉換為是的內部類實例,與不是一回事,長度固定,只能遍歷訪問,不能使用修改集合相關的方法,比如方法會拋出異常適配器模式修改數組內容后,內容也會隨之改變,體現適配器模 Java Arrays.asList()與Arrays.sort()分析 聲明 文章均為本人技術筆記,轉載請注明出處https://segment...

    pkhope 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<