日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

注意!在subList生成子列表之后,一定不要随便更改原列表

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 注意!在subList生成子列表之后,一定不要随便更改原列表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是雄雄。

前幾期我們說過,subList方法是返回原列表的子列表,并且我們還說過,在subList返回的子列表上操作時,會直接影響著原列表,原文在這里:

subList?? subString???

子列表只是原列表的一個視圖

那么,大家有沒有想過這樣一個問題,在調用subList方法返回子列表之后,我們要是不操作子列表,而是操作的原列表,會怎么樣呢?

下面我們先從一段代碼上看起:

public?static?void?testSubList(){//初始化一個集合List<String> lists = new?ArrayList<String>();//給集合中添加四個元素lists.add("A");lists.add("B");lists.add("C");lists.add("D");//遍歷集合System.out.println("原來集合中的元素:");for?(String str: lists) {System.out.print(str+" ");}System.out.println("\n子列表中的元素:");List<String>new_list = lists.subList(0, 2);for?(String str: new_list) {System.out.print(str+" ");}}

運行結果如下:

這塊代碼很好理解,無外乎就是初始化了個集合,并添加了幾個元素,通過subList方法返回了一個子列表,最后將兩個列表中的元素都遍歷出來。

接下來我要改一下代碼了,如下:

public?static?void?testSubList(){//初始化一個集合List<String> lists = new?ArrayList<String>();//給集合中添加四個元素lists.add("A");lists.add("B");lists.add("C");lists.add("D");//遍歷集合System.out.println("原來集合中的元素:");for?(String str: lists) {System.out.print(str+" ");}System.out.println("\n子列表中的元素:");List<String>new_list = lists.subList(0, 2);for?(String str: new_list) {System.out.print(str+" ");}//給原來的集合中新加一個元素lists.add("E");System.out.println("\n新加元素之后原來集合的元素:");for?(String str: lists) {System.out.print(str+" ");}System.out.println("\n新加元素之后子列表中的元素:");for?(String str: new_list) {System.out.print(str+" ");}}

這段代碼前面部分沒有變,后面只是給原集合中新插入了一個元素“E”,然后對原集合以及子列表進行遍歷,運行結果如下所示:

居然報錯了?并且是在原集合中新加元素之后遍歷子列表時報的錯。ConcurrentModificationException是并發修改異常,但是我們這里并沒有多線程操作,何來并發異常?其實,原因很簡單,那就是subList方法是原列表的子列表,當原來的集合(原列表)修改之后,subList取出的子列表并未跟著一起修改,也就是不會生成新列表,最后在最字列表操作時,程序就會發現修改計數器(Modification)與預期的不符合,故拋出此異常。

因此,在subList生成子列表之后,一定不要隨便更改原列表。

往期精彩

神奇!一行代碼實現刪除某集合下標20-30的元素

2020-10-14

‘小會計’的轉行之旅

2020-10-13

班級日常分享,一天一瞬間

2020-10-14

子列表只是原列表的一個視圖

2020-10-12

“半路出家”的程序猿怎么不被“熊”

2020-10-11

某同學工作之后的感悟

2020-10-10

班級日常分享,一天一瞬間

2020-10-10

點分享

點點贊

點在看

總結

以上是生活随笔為你收集整理的注意!在subList生成子列表之后,一定不要随便更改原列表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。