成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解Java 集合類 List 的那些坑

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

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

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

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

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

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

詳解Java 集合類 List 的那些坑

發(fā)現(xiàn)返回的 ArrayList 并不是我們常用的 java.util.ArrayList ,而是 Arrays 的內(nèi)部類 java.util.Arrays.ArrayList 。進(jìn)入方法 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 ,但是通過(guò)該類的源碼發(fā)現(xiàn)它并沒(méi)有對(duì)抽象父類 AbstractList 的 add 方法默認(rèn)就是拋出 java.lang.UnsupportedOperationException 異常。

詳解Java 集合類 List 的那些坑

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

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

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

詳解Java 集合類 List 的那些坑

從以上代碼可以發(fā)現(xiàn),對(duì)原始數(shù)組的修改會(huì)影響我們通過(guò) 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ù)組,所有當(dāng)我們使用 Arrays.asList 方式獲得的 List 時(shí)要特別注意,因?yàn)楣蚕砹藬?shù)組,相互修改時(shí)可能產(chǎn)生一些意想不到的 Bug。標(biāo)準(zhǔn)的姿勢(shì)之一是將其作為 ArrayList 構(gòu)造方法的參數(shù)重新 new 一個(gè) List 出來(lái)即可(e.g. List<String> stringList = new ArrayList<>(Arrays.asList(arrays)) )或者通過(guò) Guava 庫(kù)中的 Lists.newArrayList ,將返回的新 List 和原始的數(shù)組解耦,就不會(huì)再互相影響了。

第三個(gè)坑,直接遍歷 List 集合刪除元素會(huì)報(bào)錯(cuò)

在直接遍歷集合元素時(shí)增加、刪除元素會(huì)報(bào)錯(cuò),比如執(zhí)行如下代碼:

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

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

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

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

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日本91福利区| 欧美日韩免费视频| 91成人网在线| 野花国产精品入口| 99久久精品国产麻豆演员表| 久久久久久久久99精品| 欧美一区二区三区四区在线观看| 欧美精品国产一区| 国产一区二区h| 国产成人av福利| 亚洲免费av观看| 欧美国产国产综合| 欧美嫩在线观看| 美女黄色成人网| 欧美日韩精品综合在线| 欧美一级二区| 亚洲精品四区| 久久久久久一区二区| 亚洲无吗在线| 欧美日韩另类综合| 一区二区三区久久网| 女同一区二区| 国产精品资源在线观看| 国产精品一品二品| 一本大道久久a久久精品综合| 国产日产高清欧美一区二区三区| 国产一区自拍视频| 不卡大黄网站免费看| 99精品视频中文字幕| 成人夜色视频网站在线观看| 另类小说图片综合网| 国产成人99久久亚洲综合精品| 久久99国产精品久久99| 亚洲综合色噜噜狠狠| 乱中年女人伦av一区二区| 男人的天堂亚洲一区| 美腿丝袜亚洲综合| 久久aⅴ国产紧身牛仔裤| 国产视频一区三区| 久久国产日韩欧美| 在线免费高清一区二区三区| 亚洲精选一区| 国产精品久久久亚洲一区| 久久一区中文字幕| 欧美裸体bbwbbwbbw| 欧美日韩成人一区| 国产精品系列在线| 一区二区三区在线视频免费 | 国产美女在线精品免费观看| 亚洲欧美日韩国产一区| 亚洲一区二区在线看| 久久99热狠狠色一区二区| 国产精品99久久久久久有的能看| 亚洲国产岛国毛片在线| 天天av天天翘天天综合网| 日韩高清在线观看| 国产精品12区| 97精品久久久午夜一区二区三区| av亚洲精华国产精华精华| 首页亚洲欧美制服丝腿| 中文字幕精品在线不卡| 亚洲夂夂婷婷色拍ww47| 日韩中文字幕区一区有砖一区| 国产一区二区不卡| 国产精品视频一二三| 成人性视频免费网站| 99热这里都是精品| 国产在线一区二区三区四区| 宅男噜噜噜66一区二区| 久久资源av| 日韩精品在线看片z| 精品久久久久久久久久久久久久久久久| 国产午夜精品一区二区三区四区| 亚洲精品免费在线观看| 极品美女销魂一区二区三区免费 | 日韩精品一区二区三区在线播放| 在线亚洲一区| 欧美另类久久久品| 国产精品素人一区二区| 亚洲午夜视频在线观看| 国产精品一卡二| 欧美 日韩 国产 一区| 亚洲精品影院| 欧美日韩亚洲国产综合| 一本久久精品一区二区| 久久精品在这里| 午夜伦理一区二区| 91网址在线看| 色天天综合久久久久综合片| 精品欧美一区二区久久| 中文字幕日韩av资源站| 日韩av中文字幕一区二区三区| 99久久婷婷国产精品综合| 久久精品一二三区| 日本久久一区二区三区| 色一情一伦一子一伦一区| 国产婷婷色一区二区三区四区| 午夜伦欧美伦电影理论片| 你懂的国产精品| 欧美色综合久久| 欧美图区在线视频| 亚洲男同性视频| 亚洲免费观看高清完整版在线观看| 亚洲毛片网站| 欧美一区二区三区的| 国产精品久久久99| 国产盗摄精品一区二区三区在线 | 久久精品久久99精品久久| 亚洲精品极品| 欧美午夜电影网| 亚洲激情欧美激情| av电影天堂一区二区在线观看| 91丨porny丨国产| 久久久久91| 91精品国产综合久久蜜臀| 午夜激情综合网| 亚洲精品一区二区三| 国产视频911| 懂色中文一区二区在线播放| 一区二区三区四区五区视频| 久久九九国产精品| 99久久精品久久久久久清纯| 日韩欧美资源站| 国产精品的网站| 羞羞视频在线观看欧美| 三级不卡在线观看| 欧美日韩国产免费观看| 中文字幕在线视频一区| 一级日韩一区在线观看| 日韩精品久久理论片| 欧美久久久一区| 欧美国产视频在线观看| 成人免费在线播放视频| 中文网丁香综合网| 极品销魂美女一区二区三区| 久久天天做天天爱综合色| 国产精品多人| 人人超碰91尤物精品国产| 精品国产乱码久久久久久影片| 亚洲精品久久久久久一区二区| 首页国产欧美久久| 久久毛片高清国产| 国产精品免费在线| 成人夜色视频网站在线观看| 亚洲欧美经典视频| 欧美一区二区三区喷汁尤物| 国产精品观看| 经典三级视频一区| 亚洲欧美影音先锋| 欧美日韩免费一区二区三区视频| 欧美黄色一区二区| 美国十次了思思久久精品导航| 久久久久99精品国产片| 蜜桃精品久久久久久久免费影院| 成人午夜在线播放| 日韩精品每日更新| 国产精品久久久久久亚洲伦| 欧美日韩在线播放一区| 在线播放精品| 成人高清在线视频| 日本麻豆一区二区三区视频| 国产精品久久久久久久蜜臀| 欧美日本韩国一区二区三区视频| 亚洲第一黄网| 成人精品视频一区二区三区尤物| 亚洲成在线观看| 久久精品一区蜜桃臀影院| 在线亚洲高清视频| 一本色道久久综合亚洲精品婷婷| 99久久国产综合精品色伊| 青青草成人在线观看| ㊣最新国产の精品bt伙计久久| 欧美一区2区视频在线观看| 免费一区视频| 国内精品嫩模av私拍在线观看| 丰满岳乱妇一区二区三区| 午夜天堂影视香蕉久久| 亚洲蜜桃精久久久久久久| 久久综合给合久久狠狠狠97色69| 色狠狠av一区二区三区| 一区二区国产精品| 欧美日韩亚洲一区二区三区在线观看| 国产精品综合二区| 毛片一区二区三区| 香蕉影视欧美成人| 亚洲国产视频直播| 一区二区三区精品久久久| 国产精品区一区二区三| 久久久精品免费免费| 久久亚洲综合色| 精品欧美一区二区在线观看| 欧美高清hd18日本| 欧美亚洲综合色| 老**午夜毛片一区二区三区| 国产精品免费区二区三区观看| 亚洲毛片一区| 国产日韩三区| 六月天综合网| 色久优优欧美色久优优| 欧美亚洲国产一区二区三区|