巧用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);
        }

一层循环搞定,不用查找判断。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DataVault善战

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值