电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

詳解Java 集合類 List 的那些坑

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

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

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

例如我們執行以下代碼:

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

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

詳解Java 集合類 List 的那些坑

發現返回的 ArrayList 并不是我們常用的 java.util.ArrayList ,而是 Arrays 的內部類 java.util.Arrays.ArrayList 。進入方法 Arrays.asList 源碼如下:

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

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

詳解Java 集合類 List 的那些坑

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

第二個坑,Arrays.asList 方法返回的新 List 和該方法原始入參數組修改會相互影響

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

詳解Java 集合類 List 的那些坑

從以上代碼可以發現,對原始數組的修改會影響我們通過 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); }... }

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

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

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

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

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

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

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

標簽: Java
相關文章:
主站蜘蛛池模板: 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 密封无忧网 _ 专业的密封产品行业信息网 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 智能风向风速仪,风速告警仪,数字温湿仪,综合气象仪(气象五要素)-上海风云气象仪器有限公司 | 短信营销平台_短信群发平台_106短信发送平台-河南路尚 | 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 谈股票-今日股票行情走势分析-牛股推荐排行榜 | 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 无锡网站建设_企业网站定制-网站制作公司-阿凡达网络 | 周口市风机厂,周鼓风机,河南省周口市风机厂 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 洗瓶机厂家-酒瓶玻璃瓶冲瓶机-瓶子烘干机-封口旋盖压盖打塞机_青州惠联灌装机械 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 综合管廊模具_生态,阶梯护坡模具_检查井模具制造-致宏模具厂家 | 直线模组_滚珠丝杆滑台_模组滑台厂家_万里疆科技 | 华中线缆有限公司-电缆厂|电缆厂家|电线电缆厂家 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | PE拉伸缠绕膜,拉伸缠绕膜厂家,纳米缠绕膜-山东凯祥包装 | 汽车润滑油厂家-机油/润滑油代理-高性能机油-领驰慧润滑科技(河北)有限公司 | 亚洲工业智能制造领域专业门户网站 - 亚洲自动化与机器人网 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 江西自考网| 真空乳化机-灌装封尾机-首页-温州精灌 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 中药超微粉碎机(中药细胞级微粉碎)-百科 | 昆明挖掘机修理厂_挖掘机翻新再制造-昆明聚力工程机械维修有限公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 |