国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

探討:Java中刪除數組中重復元素

開發 后端
我有一個數組(元素個數為0哈),希望添加進去元素不能重復。拿到這樣一個問題,我可能會快速的寫下代碼,這里數組用ArrayList.

這個是一個老問題,但是發現大多數人說的還不夠透。小弟就在這里拋磚引玉了,歡迎拍磚.......

問題:比如我有一個數組(元素個數為0哈),希望添加進去元素不能重復。

拿到這樣一個問題,我可能會快速的寫下代碼,這里數組用ArrayList.

  1. private static void testListSet(){  
  2.         List<String> arrays = new ArrayList<String>(){  
  3.             @Override 
  4.             public boolean add(String e) {  
  5.                 for(String str:this){  
  6.                     if(str.equals(e)){  
  7.                         System.out.println("add failed !!!  duplicate element");  
  8.                         return false;  
  9.                     }else{  
  10.                         System.out.println("add successed !!!");  
  11.                     }  
  12.                 }  
  13.                 return super.add(e);  
  14.             }  
  15.         };  
  16.                 arrays.add("a");arrays.add("b");arrays.add("c");arrays.add("b");  
  17.         for(String e:arrays)  
  18.             System.out.print(e);  
  19.     } 

這里我什么都不關,只關心在數組添加元素的時候做下判斷(當然添加數組元素只用add方法),是否已存在相同元素,如果數組中不存在這個元素,就添加到這個數組中,反之亦然。這樣寫可能簡單,但是面臨龐大數組時就顯得笨拙:有100000元素的數組天家一個元素,難道要調用100000次equal嗎?這里是個基礎。

問題:加入已經有一些元素的數組了,怎么刪除這個數組里重復的元素呢?

大家知道java中集合總的可以分為兩大類:List與Set。List類的集合里元素要求有序但可以重復,而Set類的集合里元素要求無序但不能重復。那么這里就可以考慮利用Set這個特性把重復元素刪除不就達到目的了,畢竟用系統里已有的算法要優于自己現寫的算法吧。

  1. public static void removeDuplicate(List<People> list){  
  2.    HashSet<People> set = new HashSet<People>(list);  
  3.    list.clear();  
  4.    list.addAll(set);  
  5. }  
  6.  
  7. ivate static People[] ObjData = new People[]{  
  8.     new People(0"a"),new People(1"b"),new People(0"a"),new People(2"a"),new People(3"c"),  
  9. }; 
  1. public class People{  
  2.     private int id;  
  3.     private String name;  
  4.       
  5.     public People(int id,String name){  
  6.         this.id = id;  
  7.         this.name = name;  
  8.     }  
  9.       
  10.     @Override 
  11.     public String toString() {  
  12.         return ("id = "+id+" , name "+name);  
  13.     }  
  14.       

上面的代碼,用了一個自定義的People類,當我添加相同的對象時候(指的是含有相同的數據內容),調用removeDuplicate方法發現這樣并不能解決實際問題,仍然存在相同的對象。那么HashSet里是怎么判斷像個對象是否相同的呢?打開HashSet源碼可以發現:每次往里面添加數據的時候,就必須要調用add方法:

  1.       @Override 
  2.      public boolean add(E object) {  
  3.          return backingMap.put(object, this) == null;  
  4.      } 

這里的backingMap也就是HashSet維護的數據,它用了一個很巧妙的方法,把每次添加的Object當作HashMap里面的KEY,本身HashSet對象當作VALUE。這樣就利用了Hashmap里的KEY***性,自然而然的HashSet的數據不會重復。但是真正的是否有重復數據,就得看HashMap里的怎么判斷兩個KEY是否相同。

  1.         @Override public V put(K key, V value) {  
  2. 390         if (key == null) {  
  3. 391             return putValueForNullKey(value);  
  4. 392         }  
  5. 393   
  6. 394         int hash = secondaryHash(key.hashCode());  
  7. 395         HashMapEntry<K, V>[] tab = table;  
  8. 396         int index = hash & (tab.length - 1);  
  9. 397         for (HashMapEntry<K, V> e = tab[index]; e != null; e = e.next) {  
  10. 398             if (e.hash == hash && key.equals(e.key)) {  
  11. 399                 preModify(e);  
  12. 400                 V oldValue = e.value;  
  13. 401                 e.value = value;  
  14. 402                 return oldValue;  
  15. 403             }  
  16. 404         }  
  17. 405   
  18. 406         // No entry for (non-null) key is present; create one  
  19. 407         modCount++;  
  20. 408         if (size++ > threshold) {  
  21. 409             tab = doubleCapacity();  
  22. 410             index = hash & (tab.length - 1);  
  23. 411         }  
  24. 412         addNewEntry(key, value, hash, index);  
  25. 413         return null;  
  26. 414     } 

總的來說,這里實現的思路是:遍歷hashmap里的元素,如果元素的hashcode相等(事實上還要對hashcode做一次處理),然后去判斷KEY的eqaul方法。如果這兩個條件滿足,那么就是不同元素。那這里如果數組里的元素類型是自定義的話,要利用Set的機制,那就得自己實現equal與hashmap(這里hashmap算法就不詳細介紹了,我也就理解一點)方法了:

  1. public class People{  
  2.     private int id; //  
  3.     private String name;  
  4.       
  5.     public People(int id,String name){  
  6.         this.id = id;  
  7.         this.name = name;  
  8.     }  
  9.       
  10.     @Override 
  11.     public String toString() {  
  12.         return ("id = "+id+" , name "+name);  
  13.     }  
  14.      
  15.     public int getId() {  
  16.         return id;  
  17.     }  
  18.  
  19.     public void setId(int id) {  
  20.         this.id = id;  
  21.     }  
  22.  
  23.     public String getName() {  
  24.         return name;  
  25.     }  
  26.  
  27.     public void setName(String name) {  
  28.         this.name = name;  
  29.     }  
  30.  
  31.     @Override 
  32.     public boolean equals(Object obj) {  
  33.         if(!(obj instanceof People))  
  34.             return false;  
  35.         People o = (People)obj;  
  36.         if(id == o.getId()&&name.equals(o.getName()))  
  37.             return true;  
  38.         else 
  39.             return false;  
  40.     }  
  41.       
  42.     @Override 
  43.     public int hashCode() {  
  44.         // TODO Auto-generated method stub  
  45.         return id;  
  46.         //return super.hashCode();  
  47.     }  

這里在調用removeDuplicate(list)方法就不會出現兩個相同的people了。

原文鏈接:http://www.cnblogs.com/slider/archive/2012/01/12/2320313.html

【編輯推薦】

  1. 調查顯示Java應用服務器市場 開源完勝
  2. 一個Java程序員對2011年的回顧
  3. 用Java GUI編寫的畫板程序
  4. Java的動態綁定機制
  5. JavaFX 2012:徹底開源
責任編輯:林師授 來源: slider的博客
相關推薦

2009-11-25 16:36:29

PHP刪除數組重復元素

2009-11-25 16:29:08

PHP刪除數組元素

2015-08-04 09:18:26

JavaArrayList元素

2009-09-23 09:09:22

C#刪除數組重復項

2009-11-24 18:28:44

PHP函數array_

2009-11-30 18:21:21

PHP刪除數組元素

2009-11-25 16:40:55

PHP函數array_

2009-11-25 15:50:53

PHP刪除數組空白元素

2020-10-15 12:30:37

Python編程語言

2011-05-24 10:54:15

數據庫重復數據刪除

2012-05-29 15:29:14

JavaArrayList

2021-11-30 10:00:01

SQL數據重復

2021-01-14 08:23:15

LeetCode變量

2019-12-10 10:31:30

javascriptWeb前端開發

2010-09-01 16:47:18

SQL刪除

2009-11-26 16:49:27

PHP刪除數據庫表

2023-11-23 13:43:24

Python列表

2011-07-04 17:09:54

2021-06-22 10:24:22

Statement接口修改數據刪除數據

2013-03-06 09:41:29

點贊
收藏

51CTO技術棧公眾號

日韩视频在线免费看| 懂色av一区二区三区蜜臀| 在线观看视频一区| 在线一级视频| 国产精品看片你懂得| 国产一级做a爰片久久| 中文字幕一区二区三区乱码在线| 在线视频日韩一区| 一区二区三区 在线观看视频| 日本欧洲一区| 91精品国产欧美日韩| 影音先锋欧美资源| 久久综合资源网| 国产福利图片| 欧美日韩综合在线| 成人在线观看免费播放| 欧美成人精品xxx| 99精品电影| 日本电影一区二区三区| 国产v日产∨综合v精品视频| 人成网站免费观看| 自拍偷拍亚洲精品| 国内精品久久久久久久影视麻豆 | 91资源在线观看| 精品中文字幕在线| 三级精品在线观看| 成人网18免费网站在线| 亚洲精品720p| 欧美激情麻豆| 国产精美视频| 久久精彩免费视频| 国产精品美女| 牛牛热在线视频| 777777777亚洲妇女| 久久99国产精品免费| 日本中文字幕电影在线观看 | 国产精品v一区二区三区| 美女av免费在线观看| 日韩一级二级三级精品视频| 欧美精品日本| 免费理论片在线观看播放老| 日韩美女毛茸茸| 国产亚洲欧洲997久久综合| 影视一区二区三区| 日本一区二区高清视频| 欧美日韩国产高清一区二区 | 91av在线网站| 欧美国产禁国产网站cc| av高清不卡| 日韩三级.com| 国产呦萝稀缺另类资源| 在线看女人毛片| 亚洲亚洲精品三区日韩精品在线视频| 欧美一区国产二区| 亚洲男女自偷自拍| 性xxxxfreexxxxx欧美丶| 亚洲国产精品久久久久婷婷老年| 欧美夫妻性生活| 蜜桃传媒麻豆第一区在线观看| 激情在线小视频| 污视频在线免费观看一区二区三区| 日韩一卡二卡三卡国产欧美| 亚洲深夜影院| 成人国产电影在线观看| 久久久无码中文字幕久...| 色爱av美腿丝袜综合粉嫩av| 日本一区二区三区视频视频| 欧美亚洲国产日韩| 国产小视频免费在线观看| 日韩中文字幕一区| 久久五月天色综合| 黄色成人在线免费| 国产色一区二区三区| 在线观看亚洲视频| 一区二区在线观看视频| 日韩精品五月天| 嗯用力啊快一点好舒服小柔久久| 中文字幕在线永久在线视频| 日韩在线电影一区| 久久91亚洲精品中文字幕| 欧美性高潮在线| 国产成a人亚洲| 日本a级不卡| av日韩一区| a级片国产精品自在拍在线播放| 亚洲自偷自拍熟女另类| 91夜夜揉人人捏人人添红杏| 在线播放日韩欧美| 天天操天天综合网| 老司机精品视频网站| 国产精品一区在线看| 妞干网2018| 性色av一区二区| 四虎在线免费观看| 国内精品久久久久久野外| av漫画网站在线观看| 欧美日韩尤物久久| 欧洲亚洲一区二区三区| 911精品美国片911久久久| 香蕉精品999视频一区二区| 国产精品一区二区久久精品爱涩| 久久综合av免费| 精品日韩中文字幕| 日韩av网站大全| 欧美在线视频导航| 38少妇精品导航| 91美女福利视频高清| 久久久久久九九九九| 久久这里只有精品18| 成人3d动漫网站| 中文字幕亚洲精品视频| 免费在线看黄色| 91精品福利观看| 国产国产精品| 国产乱子轮精品视频| 国产精品美女一区二区三区 | jlzzjlzz亚洲日本少妇| 国产网站在线| 永久免费网站在线| 亚洲三级性片| 这里只有精品66| 99.玖玖.com| 欧美特黄级在线| xxx成人少妇69| 91亚洲精品久久久| 精品无码国产一区二区三区av| 蜜桃视频网站www| 999av小视频在线| 三上亚洲一区二区| 国产在线不卡视频| 精品国产91久久久| 久久人人爽人人爽爽久久| 91精品视频观看| 国产黄视频在线| 在线观看麻豆蜜桃| 四虎影视国产精品| 黄色三及免费看| 国产在线69| 国产精品久久久久无码av| 高清不卡在线观看av| 在线亚洲免费视频| 久久免费视频网站| 亚洲一区bb| 国产视频三级在线观看播放| 国产一区二区亚洲| 最新不卡av在线| 欧美专区日韩视频| 丝袜制服影音先锋| 小说区图片区色综合区| 亚洲欧美一区二区三区久本道91| 97免费视频在线播放| av在线影视| 黄在线免费看| 久久色免费在线视频| 国产精品久久久久久五月尺| 久久www免费人成精品| 少妇**av毛片在线看| 成人私拍视频| 欧美福利在线播放网址导航| 美女精品在线| 欧美私人免费视频| 国产一区二区丝袜| 亚洲欧美自拍另类日韩| 欧美xx视频| 青草av.久久免费一区| 91午夜精品| 久久精品国产成人一区二区三区| 亚洲精品videosex极品| 久久天天躁狠狠躁夜夜躁| 亚洲精品中文字幕乱码三区不卡| 亚洲日本va中文字幕久久| 久久综合给合| 成人性生交大合| 亚洲欧美成人网| 欧洲在线视频一区| free性欧美| 亚洲一区不卡在线| 欧美 日韩 国产 高清| 日韩二区三区| 精品国产一区二区三区性色av| 免费观看久久久4p| 欧美日韩不卡视频| 日本乱人伦aⅴ精品| 97av在线影院| 国产av麻豆mag剧集| 国产精品久久久久久久久免费高清| 亚洲欧美日韩国产| 欧美精品一区二区三区一线天视频 | 7777奇米亚洲综合久久| 色视频www在线播放国产| 美国十次av导航亚洲入口| 久久久久成人精品| 青青草成人网| 精品午夜av| 欧美性高潮在线| 欧美下载看逼逼| 另类一区二区| 日本韩国一区二区三区视频| 欧美日韩天天操| 国产一区二区免费在线观看|