日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解Java 集合類 List 的那些坑

瀏覽:271日期:2022-08-26 11:35:57

現(xiàn)在的一些高級編程語言都會提供各種開箱即用的數(shù)據(jù)結構的實現(xiàn),像 Java 編程語言的集合框架中就提供了各種實現(xiàn),集合類包含 Map 和 Collection 兩個大類,其中 Collection 下面的 List 列表是我們經(jīng)常使用的集合類之一,很多的業(yè)務代碼都離不開它,今天就來看看 List 列表的一些坑。

第一個坑:Arrays.asList 方法返回的 List 不支持增加、刪除操作

例如我們執(zhí)行以下代碼:

List<String> strings = Arrays.asList('m', 'g');strings.add('h');

會拋出 java.lang.UnsupportedOperationException 異常,此時你內(nèi)心 OS what?明明返回的 ArrayList 為啥不能往里面增加元素,這以后還能好好的增加元素嗎? ,然后果斷開啟 Debug 大法:

詳解Java 集合類 List 的那些坑

發(fā)現(xiàn)返回的 ArrayList 并不是我們常用的 java.util.ArrayList ,而是 Arrays 的內(nèi)部類 java.util.Arrays.ArrayList 。進入方法 Arrays.asList 源碼如下:

public static <T> List<T> asList(T... a) { return new ArrayList<>(a);}

方法返回的是 Arrays 的靜態(tài)內(nèi)部類 java.util.Arrays.ArrayList ,該類雖然和 java.util.ArrayList 也繼承自抽象類 java.util.AbstractList ,但是通過該類的源碼發(fā)現(xiàn)它并沒有對抽象父類 AbstractList 的 add 方法默認就是拋出 java.lang.UnsupportedOperationException 異常。

詳解Java 集合類 List 的那些坑

這個坑的根本原因是我們調用返回的 strings 的 add 方法是繼承自抽象父類的 add 方法,而抽象父類的方法默認就是拋出 java.lang.UnsupportedOperationException 這個異常。

第二個坑,Arrays.asList 方法返回的新 List 和該方法原始入?yún)?shù)組修改會相互影響

Arrays.asList 方法除了上面這個 不支持增加、刪除元素 這個坑之外,還有另外一個坑:

詳解Java 集合類 List 的那些坑

從以上代碼可以發(fā)現(xiàn),對原始數(shù)組的修改會影響我們通過 Arrays.asList 方法獲得的新 List ,深入 java.util.Arrays.ArrayList 的源碼:

private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable { private static final long serialVersionUID = -2764017481108945198L; private final E[] a; ArrayList(E[] array) { a = Objects.requireNonNull(array); }... }

可以發(fā)現(xiàn)是直接使用了原始的數(shù)組,所有當我們使用 Arrays.asList 方式獲得的 List 時要特別注意,因為共享了數(shù)組,相互修改時可能產(chǎn)生一些意想不到的 Bug。標準的姿勢之一是將其作為 ArrayList 構造方法的參數(shù)重新 new 一個 List 出來即可(e.g. List<String> stringList = new ArrayList<>(Arrays.asList(arrays)) )或者通過 Guava 庫中的 Lists.newArrayList ,將返回的新 List 和原始的數(shù)組解耦,就不會再互相影響了。

第三個坑,直接遍歷 List 集合刪除元素會報錯

在直接遍歷集合元素時增加、刪除元素會報錯,比如執(zhí)行如下代碼:

List<String> stringList = Lists.newArrayList('m', 'g', 'h');for (String s : stringList) { if (Arrays.asList('m', 'h').contains(s)) { stringList.remove(s); }}

以上代碼可以正常編譯通過,但是執(zhí)行時會拋出 java.util.ConcurrentModificationException 異常,查看其源碼可以發(fā)現(xiàn),刪除元素方法 remove 會使集合結構發(fā)生修改,也就是 modCount( 集合實際修改的次數(shù))會修改,在循環(huán)過程中,會比較當前 List 的集合實際修改的次數(shù) modCount 與迭代器修改的次數(shù) expectedModCount ,而 expectedModCount 是初始化時的 modCount , 二者不相等,就會報 ConcurrentModificationException 異常。解決方法主要有兩種方式,1.使用 ArrayList 的迭代器方式遍歷,然后調用其中的方法。2.在 JDK 1.8+ 可以使用 removeIf 方法進行刪除操作。

最后扎心一問:調用 ArrayList 的 remove 方法傳入 int 基本類型的數(shù)字和 Integer 包裝類型的數(shù)字,執(zhí)行結果是不是一樣的?

到此這篇關于詳解Java 集合類 List 的那些坑的文章就介紹到這了,更多相關Java List集合類坑 內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩 欧美一区二区三区| 久久久久午夜电影| 999国产精品| 麻豆久久一区| 国产精区一区二区| 日韩精品亚洲专区| 日韩在线黄色| 日本不卡高清| 日本精品一区二区三区在线观看视频| 视频一区视频二区中文| 日韩在线观看一区二区| 免费日韩视频| 亚洲三级网站| 综合激情五月婷婷| 婷婷精品久久久久久久久久不卡| 热久久国产精品| 亚洲精选91| 免费观看日韩电影| 日韩精品三区四区| 国产福利一区二区精品秒拍| 国产精品国码视频| 久久99视频| 中文字幕人成乱码在线观看| 快播电影网址老女人久久| 久久天堂av| 五月精品视频| 蜜桃久久久久久| 奇米亚洲欧美| 精品美女视频| 免费黄色成人| 一区二区不卡| 欧美国产先锋| 日韩影院二区| 91精品亚洲| 麻豆亚洲精品| 日韩福利在线观看| 精品视频一二| 99久久九九| 中文字幕av亚洲精品一部二部| 日韩av一二三| 91免费精品| 亚洲综合二区| 欧美日本久久| 亚洲风情在线资源| 亚洲男女自偷自拍| 国产麻豆精品| 九九精品调教| 免费成人在线观看| 日本成人一区二区| 久久91视频| 国产99亚洲| 香蕉久久一区| 日韩中文在线电影| 视频一区二区不卡| 欧美a在线观看| 亚洲手机在线| 日韩精品免费视频一区二区三区| 风间由美中文字幕在线看视频国产欧美| 欧美成人精品三级网站| 视频精品一区二区| 精品日产乱码久久久久久仙踪林| 亚洲精品网址| 久久女人天堂| 午夜精品婷婷| 久久国产欧美日韩精品| 国产高清不卡| 日韩区一区二| 99免费精品| 国产一级成人av| 亚洲国产专区| 麻豆精品一区二区综合av| 欧美女激情福利| 欧美激情视频一区二区三区免费| 欧美在线亚洲| 久久久久久久久成人| 亚洲女人av| 国产 日韩 欧美一区| 欧美亚洲一级| 久久精品一区二区不卡| 欧美精品影院| 亚洲激精日韩激精欧美精品| 欧美激情亚洲| 亚洲无线观看| 欧美中文一区二区| 国产精品嫩模av在线| 亚洲少妇在线| 日韩av免费| 欧美a一区二区| 亚洲欧美日本国产| 欧美日韩一区二区综合| 精品美女视频| 久久狠狠久久| 日韩精品一二三四| 91亚洲一区| 国产黄色精品| 日韩成人精品一区二区三区 | 日韩中文字幕不卡| 久久精品亚洲人成影院| 欧美激情综合| 欧美亚洲人成在线| 日韩专区在线视频| 免费精品国产| 久久久久久夜| 精品国产亚洲一区二区在线观看| 日韩精品电影一区亚洲| 久久午夜精品| 不卡一区2区| 国产精品黑丝在线播放| 国产免费播放一区二区| 亚洲专区在线| 亚洲午夜一级| 91精品国产自产在线观看永久∴| 久久99影视| 国产欧美高清视频在线| 日本不卡高清| 中文字幕日韩高清在线| 一本色道精品久久一区二区三区| 久久久人人人| 日韩av一级| 久久久蜜桃一区二区人| 日韩深夜视频| 国产精品麻豆久久| 欧美日韩视频免费看| 日韩精品亚洲专区| 色狠狠一区二区三区| 日韩精品一区第一页| 视频一区在线视频| 亚洲天堂免费| 日韩中出av| 日韩精品三区四区| 日韩精品亚洲专区| 欧美欧美黄在线二区| 日韩不卡一区二区| 欧美亚洲免费| 国产精品mm| 久久久精品国产**网站| 国产精品一区二区三区四区在线观看 | 欧美日韩在线观看视频小说| 亚洲www啪成人一区二区| 色婷婷亚洲mv天堂mv在影片| 吉吉日韩欧美| 久久激情网站| 免费国产自久久久久三四区久久 | 欧美亚洲在线日韩| 欧美日韩视频| 亚洲成人精选| 蜜桃久久av一区| 日韩av电影一区| 久久av中文| 在线天堂资源www在线污| 国产传媒在线| 午夜久久影院| 亚洲精品一二| 麻豆精品视频在线观看视频| 成人国产精品久久| 91精品国产成人观看| 国产亚洲高清视频| 日韩高清三区| 国产一区二区三区天码| 日韩久久视频| 欧美午夜精彩| 蜜臀av性久久久久蜜臀aⅴ流畅| 综合一区二区三区| 国产精品s色| 久久久久一区| 天堂久久av| 精品视频在线观看网站| 亚洲高清成人| 日韩激情啪啪| 欧美三区四区| 亚洲精选久久| 97精品国产一区二区三区| 亚洲专区欧美专区| 欧美精品二区| 91久久午夜| 国产美女亚洲精品7777| 久久久777| 国产欧美激情| 亚洲精品极品少妇16p| 国产麻豆一区| 欧美日韩视频一区二区三区| 久久国产免费看| 亚洲一本视频| 国产日韩一区二区三区在线播放| 日韩在线第七页| 男人天堂欧美日韩| 国产日韩视频| 午夜久久99| 日本综合视频| 欧美成人日韩| 亚洲欧洲日韩| 高清一区二区三区av| 蜜桃一区二区三区| 日本中文字幕视频一区| 成人午夜毛片| 日韩动漫一区| 日韩精品诱惑一区?区三区| 国产亚洲永久域名| 欧美亚洲综合视频| 午夜欧美精品|