posts - 54,  comments - 1,  trackbacks - 0

          項目中的問題:ArrayList中可能存在重復值,需要將重復值剔除掉.剛開始的想法是做一個嵌套循環,將當前值與之后的所有值比較,如果重復則將后面重復的值刪除掉.但是運行后發現,由于循環中刪除值后會影響到數組的索引值,所以會出現漏值和跳值的現象.

          仔細想想后,覺得應該反向遍歷數組,這樣從后面刪除元素后不會影響到前面元素的索引值,可以避免前面的問題:

           // 刪除ArrayList中重復元素
           public static void removeDuplicate(List list) {
            
          for (int i = 0; i < list.size() - 1; i++{
             
          for (int j = list.size() - 1; j > i; j--{
              
          if (list.get(j).equals(list.get(i))) {
               list.remove(j);
              }

             }

            }

            System.
          out.println(list);
           }


          可是這樣做,總覺得嵌套循環的效率很低,比較ArrayList大了以后的執行時間.又想到HashSet中是不能有又重復值的,要是能用HashSet來過濾該多好.查了下JDK的文檔,發現HashSet有一個構造函數 public HashSet(Collection c),到網上一查,果然有這樣做的例子(http://blog.csdn.net/doodoofish/archive/2004/05/07/17922.aspx):

          // 刪除ArrayList中重復元素
           public static void removeDuplicate(List list) {
            HashSet h 
          = new HashSet(list);
            list.clear();
            list.addAll(h);
            System.
          out.println(list);
           }


           
          //刪除ArrayList中重復元素,保持順序
           public static void removeDuplicateWithOrder(List list) {
            Set 
          set = new HashSet();
            List newList 
          = new ArrayList();
            
          for (Iterator iter = list.iterator(); iter.hasNext();) {
             Object element 
          = iter.next();
             
          if (set.add(element))
              newList.add(element);
            }

            list.clear();
            list.addAll(newList);
            System.
          out.println("remove duplicate" + list);
           }


          可以看出:向Set中即使插入重復值,也只會保留個實例.

          不過,運行后發現使用循環的方法好像并不比Set過濾慢多少(1000條記錄,10~20毫秒),而且某些情況下Set過濾甚至比循環還慢(最慢一次是 311毫秒:60毫秒)

          posted on 2005-08-18 11:38 ZhuJun 閱讀(2011) 評論(1)  編輯  收藏 所屬分類: 開發手記

          FeedBack:
          # re: 剔除ArrayList中的重復值
          2008-08-26 14:01 | nf
          根本不好用  回復  更多評論
            

          蜀中人氏,躬耕于珠海

          <2005年8月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(2)

          隨筆分類(71)

          隨筆檔案(54)

          博客

          文檔

          站點

          論壇

          搜索

          •  

          積分與排名

          • 積分 - 51266
          • 排名 - 974

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 和静县| 华亭县| 怀宁县| 靖宇县| 商南县| 芜湖县| 介休市| 团风县| 株洲县| 建湖县| 鹤峰县| 平塘县| 石嘴山市| 团风县| 获嘉县| 金堂县| 普定县| 永仁县| 自贡市| 汤原县| 长海县| 常熟市| 张北县| 昌吉市| 余干县| 临汾市| 平舆县| 普洱| 喜德县| 京山县| 昔阳县| 贵港市| 静安区| 绥阳县| 拉孜县| 遵化市| 通山县| 吉首市| 蕉岭县| 荔浦县| 星座|