子在川上曰

            逝者如斯夫不舍晝夜
          隨筆 - 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
          主站蜘蛛池模板: 江西省| 尼木县| 于都县| 澎湖县| 都昌县| 南平市| 纳雍县| 长治市| 廉江市| 伊春市| 彩票| 铜梁县| 涿鹿县| 安国市| 昆山市| 大连市| 溧阳市| 青龙| 利川市| 九江市| 静海县| 湖北省| 平顶山市| 铅山县| 黎城县| 诸暨市| 萍乡市| 东光县| 星子县| 秦安县| 牡丹江市| 万山特区| 邹平县| 班戈县| 安平县| 杭锦后旗| 娄底市| 达州市| 昌都县| 洪雅县| 澄城县|