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

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

淺談Java list.remove( )方法需要注意的兩個坑

瀏覽:23日期:2022-08-20 09:12:14

list.remove

最近做項目的過程中,需要用到list.remove()方法,結果發現兩個有趣的坑,經過分析后找到原因,記錄一下跟大家分享一下。

代碼

直接上一段代碼,進行分析。

public class Main { public static void main(String[] args) { List<String> stringList = new ArrayList<>();//數據集合 List<Integer> integerList = new ArrayList<>();//存儲remove的位置 stringList.add('a'); stringList.add('b'); stringList.add('c'); stringList.add('d'); stringList.add('e'); integerList.add(2); integerList.add(4);//此處相當于要移除最后一個數據 for (Integer i :integerList){ stringList.remove(i); } for (String s :stringList){ System.out.println(s); } }}

如上代碼我們有一個5個元素的list數據集合,我們要刪除第2個和第4個位置的數據。

第一次運行

淺談Java list.remove( )方法需要注意的兩個坑

咦,為什么執行兩次remove(),stringList的數據沒有變化呢?

沒有報錯,說明代碼沒有問題,那問題出在哪呢?

仔細分析我們發現,remove()這個方法是一個重載方法,即remove(int position)和remove(object object),唯一的區別是參數類型。

for (Integer i :integerList){ stringList.remove(i); }

仔細觀察上面代碼你會發現,其實i是Integer對象,而由于Java系統中如果找不到準確的對象,會自動向上升級,而(int < Integer < Object),所以在調用stringList.remove(i)時,其實使用的remove(object object),而很明顯stringList不存在Integer對象,自然會移除失敗(0.0),Java也不會因此報錯。

如果我們想使用remove(int position)方法,只能降低對象等級,即修改代碼;

for (Integer i :integerList){ int a =i; stringList.remove(a); }

第二次運行

淺談Java list.remove( )方法需要注意的兩個坑

我們發現提示在坐標為4的地方越界了,這是為什么呢?

其實很簡單,因為執行stringList.remove(2)后,list.size()就-1為4了,我們原來要移除的最后一個位置的數據移動到了第3個位置上,自然就造成了越界。

我們修改代碼先執行stringList.remove(4),再執行執行stringList.remove(2)。

integerList.add(4);

integerList.add(2);

這個錯誤提醒我們:使用remove()的方法時,要先從大到小的位置移除。當然如果你知道具體的對象,直接移除remove(對象)更穩妥。

第三次執行

淺談Java list.remove( )方法需要注意的兩個坑

嗯,這次沒問題了。

總結

1、使用remove()的方法時,要先從大到小的位置移除。當然如果你知道具體的對象,直接移除remove(對象)更穩妥。

2、要密切注意自己調用的remove()方法中的,傳入的是int類型還是一個對象。

補充知識: 關于List.remove()報錯的問題

我們如果想刪掉List中某一個對象,我們可能就會想到會用List.remove()方法。但是這樣如果后續操作這個list的時候就會報錯。

具體的原因是當你操作了List的remove方法的時候,他回去修改List的modCount屬性。

導致拋出異常java.util.ConcurrentModificationException。

最好的想要修改List對象,我們可以用ListIterator。

就像這樣:

ArrayList<Integer> arrayList = new ArrayList<>(); for (int i = 0; i < 20; i++) { arrayList.add(Integer.valueOf(i)); }ListIterator<Integer> iterator = arrayList.listIterator();while (iterator.hasNext()) {if(需要滿足的條件){iterator.remove();//刪除操作iterator.add(integer);//新增操作}}

這樣就不會去修改List的modCount屬性。

以上這篇淺談Java list.remove( )方法需要注意的兩個坑就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 生产加气砖设备厂家很多,杜甫机械加气砖设备价格公道 | 餐饮加盟网_特色餐饮加盟店_餐饮连锁店加盟| 亿诺千企网-企业核心产品贸易 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 企业VI设计_LOGO设计公司_品牌商标设计_【北京美研】 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | 郑州水质检测中心_井水检测_河南废气检测_河南中环嘉创检测 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 周口市风机厂,周鼓风机,河南省周口市风机厂 | 充气膜专家-气膜馆-PTFE膜结构-ETFE膜结构-商业街膜结构-奥克金鼎 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 西门子代理商_西门子变频器总代理-翰粤百科 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 全自动贴标机-套标机-工业热风机-不干胶贴标机-上海厚冉机械 | 螺杆泵_中成泵业| 软文推广发布平台_新闻稿件自助发布_媒体邀约-澜媒宝 | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 湖南教师资格网-湖南教师资格证考试网 | 电磁流量计_智能防腐防爆管道式计量表-金湖凯铭仪表有限公司 | 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 镀锌钢格栅_热镀锌格栅板_钢格栅板_热镀锌钢格板-安平县昊泽丝网制品有限公司 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 |