巧用HashMap去重
阿新 • • 發佈:2018-12-23
很多時候,我們查詢出來的資料需要去重的,而且是有條件地去重和排序,雖然大部分的時候可以自己絞盡腦汁寫個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);
}
一層迴圈搞定,不用查詢判斷。