pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Iterator 的 remove 方法實際上是如何刪除一個對象的

How Iterator#39;s remove method actually remove an object(Iterator 的 remove 方法實際上是如何刪除一個對象的)
本文介紹了Iterator 的 remove 方法實際上是如何刪除一個對象的的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我們都知道,在迭代時從集合中刪除對象的最安全可能也是唯一安全"的方法是首先檢索 Iterator,執行循環并在需要時刪除;

We all know that the safest "and probably only safe" way of removing an object from a collection while iterating it, is by first retrieving the Iterator, perform a loop and remove when needed;

Iterator iter=Collection.iterator();
while(iter.hasNext()){
    Object o=iter.next()
    if(o.equals(what i'm looking for)){
        iter.remove();
    }
}

我想了解,但遺憾的是還沒有找到深入的技術解釋,是如何執行此刪除操作,
如果:

What I would like to understand, and unfortunately haven't found a deep technical explanation about, is how this removal is performed,
If:

for(Object o:myCollection().getObjects()){
    if(o.equals(what i'm looking for)){
        myCollection.remove(o);
    }
}

會拋出一個ConcurrentModificationException,從技術上來說"Iterator.remove()是做什么的?它會移除對象、中斷循環并重新開始循環嗎?

Will throw a ConcurrentModificationException, what does "in technical terms" Iterator.remove() do? Does it removes the object, breaks the loop and restart the loop?

我在官方文檔中看到:

I see in the official documentation:

"刪除當前元素.如果有,則拋出 IllegalStateException嘗試調用 remove() 之前沒有調用下一個()."

"Removes the current element. Throws IllegalStateException if an attempt is made to call remove() that is not preceded by a call to next( )."

刪除當前元素"部分讓我想到了常規"循環中發生的完全相同的情況 =>(執行相等測試并在需要時刪除),但為什么迭代器循環 ConcurrentModification 安全?

The part "removes the current element", makes me think of the exact same situation happening in a "regular" loop => (perform equality test and remove if needed), but why is the Iterator loop ConcurrentModification-safe?

推薦答案

Iterator 移除元素的具體方式取決于它的實現,對于不同的 Collections 可能會有所不同.絕對不會破壞您所處的循環.我剛剛查看了 ArrayList 迭代器的實現方式,代碼如下:

How exactly Iterator removes elements depends on its implementation, which may be different for different Collections. Definitely it doesn't break the loop you're in. I've just looked how ArrayList iterator is implemented and here's the code:

public void remove() {
    if (lastRet < 0)
        throw new IllegalStateException();
    checkForComodification();

    try {
        ArrayList.this.remove(lastRet);
        cursor = lastRet;
        lastRet = -1;
        expectedModCount = modCount;
    } catch (IndexOutOfBoundsException ex) {
        throw new ConcurrentModificationException();
    }
}

因此它檢查并發修改,使用公共 ArrayList remove 方法刪除元素,并增加列表修改的計數器,以便在下一次迭代時不會拋出 ConcurrentModificationException.

So it checks for concurrent modifications, removes element using public ArrayList remove method, and increments counter of list modifications so ConcurrentModificationException won't be thrown at next iteration.

這篇關于Iterator 的 remove 方法實際上是如何刪除一個對象的的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Java Remove Duplicates from an Array?(Java從數組中刪除重復項?)
How to fix Invocation failed Unexpected Response from Server: Unauthorized in Android studio(如何修復調用失敗來自服務器的意外響應:在 Android 工作室中未經授權)
AES encryption, got extra trash characters in decrypted file(AES 加密,解密文件中有多余的垃圾字符)
AES Error: Given final block not properly padded(AES 錯誤:給定的最終塊未正確填充)
Detecting incorrect key using AES/GCM in JAVA(在 JAVA 中使用 AES/GCM 檢測不正確的密鑰)
AES-256-CBC in Java(Java 中的 AES-256-CBC)
主站蜘蛛池模板: 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 自动检重秤-动态称重机-重量分选秤-苏州金钻称重设备系统开发有限公司 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 福建省教师资格证-福建教师资格证考试网 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | Pos机办理_个人商户免费POS机申请-拉卡拉办理网 | 杭州荣奥家具有限公司-浙江办公家具,杭州办公家具厂 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 | 酒店品牌设计-酒店vi设计-酒店标识设计【国际级】VI策划公司 | 刘秘书_你身边专业的工作范文写作小秘书 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 硬度计_影像测量仪_维氏硬度计_佛山市精测计量仪器设备有限公司厂家 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | 安徽成考网-安徽成人高考网 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 西安标准厂房_陕西工业厂房_西咸新区独栋厂房_长信科技产业园官方网站 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 合肥卓创建筑装饰,专业办公室装饰、商业空间装修与设计。 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 机床导轨_导轨板_滚轮导轨-上海旻佑精密机械有限公司 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 洗石机-移动滚筒式,振动,螺旋,洗矿机-青州冠诚重工机械有限公司 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | 苏商学院官网 - 江苏地区唯一一家企业家自办的前瞻型、实操型商学院 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 四合院设计_四合院装修_四合院会所设计-四合院古建设计与建造中心1 | 浙江美尔凯特智能厨卫股份有限公司| SDG吸附剂,SDG酸气吸附剂,干式酸性气体吸收剂生产厂家,超过20年生产使用经验。 - 富莱尔环保设备公司(原名天津市武清县环保设备厂) | 智能楼宇-楼宇自控系统-楼宇智能化-楼宇自动化-三水智能化 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 真空乳化机-灌装封尾机-首页-温州精灌 | 电镀电源整流器_高频电解电源_单脉双脉冲电源 - 东阳市旭东电子科技 |