子在川上曰

            逝者如斯夫不舍晝夜
          隨筆 - 71, 文章 - 0, 評論 - 915, 引用 - 0
          數據加載中……

          如何刪除JAVA集合中的元素

          文/陳剛 2005-12-05?

          經常我們要刪除集合中的某些元素。有些可能會這么寫。
          ???
            public void operate(List list){
          ??????? for (Iterator it = list.iterator(); it.hasNext();) {
          ??????????? String str =? (String)it.next();
          ??????????? if (str.equals("chengang")){
          ??????????????? list.remove(str);
          ??????????? }
          ??????? }
          ??? }
             
            這種寫法一運行就會報如下異常:
           
          Exception in thread "main" java.util.ConcurrentModificationException
          ?at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
           
            因為list在循環中的時候是不可以刪除它的元素的。后來我是這樣做的,一種很笨的方法,思路是這樣的:創建一個List專門存放要被刪除的元素,循環過后,用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);
          ??? }
           
            這樣也確實可以解決問題了,但是方法實在太笨重,其實可以有更簡單的更高效的方法,就是用Iterator.remove方法,如下:
          ??????? for (Iterator it = list.iterator(); it.hasNext();) {
          ??????????? String str =? (String)it.next();
          ??????????? if (str.equals("chengang")){
          ??????????????? it.remove();
          ??????????? }
          ??????? }
          ?
           所以,你對Java的基礎知識了解越多,代碼就會寫得越簡潔。相反如果你的代碼特別復雜,則方法或設計一定有問題。

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

          評論

          # re: 如何刪除JAVA集合中的元素  回復  更多評論   

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

          # re: 如何刪除JAVA集合中的元素  回復  更多評論   

          這個函數本身執行是不會 報錯的.
          你可能是這樣的調用過程報的上面那個錯
          過程1:
          ........
          Iterator it=list.iterator();
          operate(list);
          while(it.hasNext()){
          System.out.println(it.next());
          }
          ...............................
          這樣確實會報上面那個錯誤:
          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)

          .....................................
          是因為前面的Iteater引用了這個元素,但被刪了.
          正確的過程應該是:2
          過程2:
          ..........
          operate(list);
          Iterator it=list.iterator();
          while(it.hasNext()){
          System.out.println(it.next());
          }
          2008-03-27 13:55 | yingwu
          主站蜘蛛池模板: 沐川县| 清镇市| 西乌珠穆沁旗| 黔南| 张掖市| 云安县| 铜山县| 富源县| 开鲁县| 蚌埠市| 法库县| 济阳县| 东至县| 巢湖市| 翼城县| 浮山县| 莎车县| 五华县| 定南县| 嵊州市| 三江| 武胜县| 嵊泗县| 山阳县| 邵阳市| 铁力市| 西贡区| 开平市| 宁城县| 沐川县| 福海县| 鹿邑县| 南江县| 容城县| 虞城县| 永善县| 比如县| 泸西县| 克拉玛依市| 沁源县| 镇赉县|