<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    子在川上曰

      逝者如斯夫不舍晝夜
    隨筆 - 71, 文章 - 0, 評(píng)論 - 915, 引用 - 0
    數(shù)據(jù)加載中……

    如何刪除JAVA集合中的元素

    文/陳剛 2005-12-05?

    經(jīng)常我們要?jiǎng)h除集合中的某些元素。有些可能會(huì)這么寫。
    ???
      public void operate(List list){
    ??????? for (Iterator it = list.iterator(); it.hasNext();) {
    ??????????? String str =? (String)it.next();
    ??????????? if (str.equals("chengang")){
    ??????????????? list.remove(str);
    ??????????? }
    ??????? }
    ??? }
       
      這種寫法一運(yùn)行就會(huì)報(bào)如下異常:
     
    Exception in thread "main" java.util.ConcurrentModificationException
    ?at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
     
      因?yàn)閘ist在循環(huán)中的時(shí)候是不可以刪除它的元素的。后來我是這樣做的,一種很笨的方法,思路是這樣的:創(chuàng)建一個(gè)List專門存放要被刪除的元素,循環(huán)過后,用List.removeAll方法把元素刪除。代碼如下:
    ??? public void operate(List list){
    ??????? List removeList= new ArrayList();
    ??????? for (Iterator it = list.iterator(); it.hasNext();) {
    ??????????? String str =? (String)it.next();
    ??????????? if (str.equals("chengang")){
    ??????????????? removeList.add(str);
    ??????????? }
    ??????? }
    ??????? list.removeAll(removeList);
    ??? }
     
      這樣也確實(shí)可以解決問題了,但是方法實(shí)在太笨重,其實(shí)可以有更簡(jiǎn)單的更高效的方法,就是用Iterator.remove方法,如下:
    ??????? for (Iterator it = list.iterator(); it.hasNext();) {
    ??????????? String str =? (String)it.next();
    ??????????? if (str.equals("chengang")){
    ??????????????? it.remove();
    ??????????? }
    ??????? }
    ?
     所以,你對(duì)Java的基礎(chǔ)知識(shí)了解越多,代碼就會(huì)寫得越簡(jiǎn)潔。相反如果你的代碼特別復(fù)雜,則方法或設(shè)計(jì)一定有問題。

    posted on 2006-03-02 14:02 陳剛 閱讀(3798) 評(píng)論(2)  編輯  收藏 所屬分類: Java

    評(píng)論

    # re: 如何刪除JAVA集合中的元素  回復(fù)  更多評(píng)論   

    用下標(biāo)操作就行了,寫這么多.
    2008-03-25 17:59 |

    # re: 如何刪除JAVA集合中的元素  回復(fù)  更多評(píng)論   

    這個(gè)函數(shù)本身執(zhí)行是不會(huì) 報(bào)錯(cuò)的.
    你可能是這樣的調(diào)用過程報(bào)的上面那個(gè)錯(cuò)
    過程1:
    ........
    Iterator it=list.iterator();
    operate(list);
    while(it.hasNext()){
    System.out.println(it.next());
    }
    ...............................
    這樣確實(shí)會(huì)報(bào)上面那個(gè)錯(cuò)誤:
    Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
    at java.util.AbstractList$Itr.next(Unknown Source)
    at yingwu.test.all.DeleteFromList.main(DeleteFromList.java:30)

    .....................................
    是因?yàn)榍懊娴腎teater引用了這個(gè)元素,但被刪了.
    正確的過程應(yīng)該是:2
    過程2:
    ..........
    operate(list);
    Iterator it=list.iterator();
    while(it.hasNext()){
    System.out.println(it.next());
    }
    2008-03-27 13:55 | yingwu
    主站蜘蛛池模板: 日本免费福利视频| 亚洲中文字幕无码亚洲成A人片| 久久久久国产精品免费免费搜索 | 亚洲日本中文字幕天天更新| 亚洲国产精品成人久久| 亚洲AV永久无码精品一区二区国产| 久久精品免费一区二区| 男女作爱在线播放免费网站| 一个人看的www在线免费视频| 亚洲精品国产第一综合99久久| 亚洲手机中文字幕| 亚洲av无码成人黄网站在线观看| 亚洲精品tv久久久久| 国产精品久免费的黄网站| 国产日本一线在线观看免费| 香港a毛片免费观看 | 又黄又爽又成人免费视频| 国产免费无码一区二区| 一级看片免费视频| 国产亚洲男人的天堂在线观看| 亚洲综合精品成人| 亚洲第一男人天堂| 亚洲综合色区中文字幕| 亚洲另类小说图片| 亚洲第一页在线观看| 亚洲黄色网址大全| 亚洲性天天干天天摸| 亚洲人成影院在线| 久久精品a亚洲国产v高清不卡| 久久精品国产亚洲AV网站| 国产AV无码专区亚洲精品| 伊人久久亚洲综合| 国产亚洲精品a在线观看 | 亚洲av无码成人精品区一本二本| 亚洲永久在线观看| 亚洲精品天堂成人片AV在线播放| 亚洲日本va一区二区三区| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲AV成人无码网天堂| 色欲色欲天天天www亚洲伊| 国产成人高清亚洲一区91|