最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin遍歷集合導(dǎo)致并發(fā)修改異常的原因和解決方法

 更新時間:2021年03月09日 12:03:17   作者:大王派來巡山的小旋風(fēng)  
這篇文章主要介紹了Kotlin遍歷集合導(dǎo)致并發(fā)修改異常的原因和解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

各位android 老司機們,對于android 遍歷結(jié)合的時候,發(fā)生并發(fā)修改異常一定毫不陌生;

之前看到過一篇文章,

在阿里巴巴Java開發(fā)手冊中,有這樣一條規(guī)定:

其實,增強for循環(huán)也是Java給我們提供的一個語法糖,如果將以上代碼編譯后的class文件進行反編譯(使用jad工具)的話,可以得到以下代碼:

1、原因:(其實我都不想在各位老司機面前再贅述這個了。-_-||)

這個異常產(chǎn)生的原因是,迭代器依賴于集合而存在,在判斷成功后,集合中添加了新的元素,而迭代器并不知道,所有就報錯了。其實這個問題說的是:迭代器遍歷集合中的元素的時候,不要使用集合對象去修改集合中的元素。

翻看ArrayList源碼和iterator()方法的具體實現(xiàn),可以發(fā)現(xiàn)ArrayList繼承于集合抽象類有一個成員變量modCount,在每次對元素進行增刪改時,相應(yīng)方法會將modCount++。而進行遍歷iterator的next方法中首先會調(diào)用checkForComodification()方法,這個方法會對modCount和expectedModCount進行比較,expectedModCount是iterator的成員變量,一開始被賦值為modCount,兩者不等就會拋出并發(fā)修改的異常。

解決方案:迭代器遍歷的時候,可以通過迭代器修改集合中的元素,iterator類中也有修改元素的方法,并在修改完成后重新將modCount賦值給expectedModCount,之后進行next遍歷檢查就不會再報異常。

2、解決方法:

1、直接使用普通for循環(huán)進行操作

用for 循環(huán)遍歷,然后直接用list 操作,eg:

2、foreach,或者Iterator 遍歷的,直接用Iterator 來操作

3、問題復(fù)現(xiàn)

那么說了這多,其實就是mapIndexed 這個方法,這個語法糖其實是基于Iterator來遍歷的。

所以,如果你要是在使用這個方式遍歷的過程中從集合中remove元素,那就會有并發(fā)修改異常產(chǎn)生 ;

我還是貪圖Kotlin 高級用法的甜頭,而忽視了細節(jié),導(dǎo)致問題出現(xiàn),粗心大意,理解不深害死人。。

總結(jié)

到此這篇關(guān)于Kotlin遍歷集合導(dǎo)致并發(fā)修改異常的原因和解決方法的文章就介紹到這了,更多相關(guān)Kotlin遍歷集合并發(fā)異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android使用HBuilder的緩存方法

    Android使用HBuilder的緩存方法

    這篇文章主要介紹了Android使用HBuilder的緩存方法 ,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • Android之內(nèi)置和外置sdcard路徑顯示并且寫入數(shù)據(jù)的方法

    Android之內(nèi)置和外置sdcard路徑顯示并且寫入數(shù)據(jù)的方法

    今天小編就為大家分享一篇Android之內(nèi)置和外置sdcard路徑顯示并且寫入數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 詳解Android中motion_toast的使用

    詳解Android中motion_toast的使用

    我們通常會用 toast(也叫吐司)來顯示提示信息,例如網(wǎng)絡(luò)請求錯誤,校驗錯誤等等。本文為大家介紹一個非常有趣的toast組件 —— motion_toast,感興趣的可以了解一下
    2022-06-06
  • Android冷啟動優(yōu)化的3個小案例分享

    Android冷啟動優(yōu)化的3個小案例分享

    為了提高App的冷啟動耗時,除了在常規(guī)的業(yè)務(wù)側(cè)進行耗時代碼優(yōu)化之外,為了進一步縮短啟動耗時,需要在純技術(shù)測做一些優(yōu)化探索,本期我們從類預(yù)加載、Retrofit 、ARouter方面進行了進一步的優(yōu)化,感興趣的同學(xué)跟著小編一起來看看吧
    2023-07-07
  • Android中backgroundDimEnabled的作用

    Android中backgroundDimEnabled的作用

    這篇文章主要介紹了Android中backgroundDimEnabled的作用的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Android自定義View實現(xiàn)垂直時間軸布局

    Android自定義View實現(xiàn)垂直時間軸布局

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)垂直時間軸布局的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 解決android studio中使用monitor工具無法打開data文件夾問題

    解決android studio中使用monitor工具無法打開data文件夾問題

    這篇文章主要介紹了解決android studio中使用monitor工具無法打開data文件夾問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Android實現(xiàn)顏色選取圓盤

    Android實現(xiàn)顏色選取圓盤

    這篇文章主要為大家詳細介紹了Android實現(xiàn)顏色選取圓盤,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Android Jetpack組件中LiveData的優(yōu)劣

    Android Jetpack組件中LiveData的優(yōu)劣

    LiveData是Jetpack組件的一部分,更多的時候是搭配ViewModel來使用,相對于Observable,LiveData的最大優(yōu)勢是其具有生命感知的,換句話說,LiveData可以保證只有在組件(?Activity、Fragment、Service)處于活動生命周期狀態(tài)的時候才會更新數(shù)據(jù)
    2023-04-04
  • Android通過自定義ImageView控件實現(xiàn)圖片的縮放和拖動的實現(xiàn)代碼

    Android通過自定義ImageView控件實現(xiàn)圖片的縮放和拖動的實現(xiàn)代碼

    通過自定義ImageView控件,在xml布局里面調(diào)用自定的組件實現(xiàn)圖片的縮放。下面給大家分享實現(xiàn)代碼,感興趣的朋友一起看看吧
    2016-10-10

最新評論

曲水县| 云龙县| 荣成市| 武汉市| 千阳县| 白山市| 榆社县| 满城县| 陈巴尔虎旗| 奉节县| 虹口区| 监利县| 南华县| 梅河口市| 年辖:市辖区| 平和县| 昌都县| 泸定县| 麟游县| 永善县| 库尔勒市| 读书| 阿尔山市| 那坡县| 綦江县| 嵩明县| 南城县| 宁德市| 屯留县| 两当县| 汝阳县| 监利县| 泰和县| 桃园市| 和田市| 甘南县| 普兰县| 抚顺县| 沾化县| 广灵县| 治多县|