1. 程式人生 > >巧用HashMap去重

巧用HashMap去重

很多時候,我們查詢出來的資料需要去重的,而且是有條件地去重和排序,雖然大部分的時候可以自己絞盡腦汁寫個sql去達到目標。例如我們需要某一列不重複,而且需要其他的某列值是最大或最小,特別是其他列的資料來源於其他的表,這時候寫sql的難度就大大的增加了。
如果用HashMap就不用考慮那麼多問題。我們只需要寫一個查詢排好序sql,
然後把結果迴圈put進map裡面就可以啦,去重的欄位就作為key值,value值按需輸入就可以。

list = this.jdbcTemplate.query(sql.toString(), new BeanPropertyRowMapper(xxx.class));
Map
<String,xxx> map=new HashMap<String,xxx>(); for(xxx cr:list){ map.put(cr.getBookName(), cr); }

當然HashMap還能用於生成多個隨機碼的時候避免重複。
隨機碼生成有很小的概率會重複,但不代表不會出現特別是資料量很大的時候。一般避免重複的方法就是放到某個容器裡面例如list、Map等,然後contains(xxx)查詢重複,用if語句去判斷是否插入進去然後再去生成。
如下兩層迴圈去生成下去

for(int i=0;i<codeMaxCount;i++){
             code =getRandom(XX);
             while
(map.containsKey(code)){ code = getRandom(XX); } map.put(code, code); }

當然HashMap的contains(xxx)用於查詢效率比list的高。
上面的用法忽略了HashMap去重的特性
其實可以這樣使用

while(map.size()<codeMaxCount){
         code = getRandom(XXX);
         map.put(code, code);
        }

一層迴圈搞定,不用查詢判斷。