zoukankan      html  css  js  c++  java
  • 探讨:通过循环数组或者集合,插入数据库中没有的数据

    【场景】

    要将一组物品 As 放入盒子 Bs 中,如果盒子有该物品,则不把该物品放入盒子。

    即,通过循环数组或者集合,插入数据库中没有的数据。

    【业务分析】

    经常会有初学者进行类似于如下的循环判断

    for(A a : As){
        for(B b : Bs){
            if (B.equals(A)) {
                break;
            } else {
                insert(A)
            }
        }
    }

    这段代码存在如下问题:
    1. 在判断 Bs 中是否有 a 时,会把 Bs 中的所有物品与 a 对比,此时只要 Bs 中有与 a 不相等的物品,就会把 a 插入到数据库。换句话说就是,Bs 中有多个与 a 不相等的物品,那么 a 将被多次插入到数据库中。
    2. 如果 Bs 只有两个物品,那么你将很难从数据库中的数据发现这个问题。

    而正确的逻辑判断应该是如下代码:

    /**
    * 声明一个标志,默认数据时可以插入数据库的
    * 当出现相等的时候,将该标志设置为 false。
    * 当不相等时,不对标志进行处理
    * 循环完成后,再对标志进行判断,
    * true,表示循环中没有相同的物品,可以插入
    * false,表示循环中有相同的物品,不插入
    */
    flag in = true
    for(A a : As){
        for(B b : Bs){
            if (B.equals(A)) {
               in = false;
               break;
            }
        }
        if(in){
            insert(A)
        }
    }
    
    

    如果你有更优化的方案,请在评论区回复。欢迎大家指正。

  • 相关阅读:
    python2中的SSL:CERTIFICATE_VERIFY_FAILED错误的解决办法
    head first 设计模式第一章笔记
    pycharm设置python脚本模板
    zip的压缩和解压命令
    js数组和集合互转
    查看Oracle的连接数
    转 小辉_Ray DOM性能小记
    学习总结之javaScript document对象详解
    MySQL 表的一些操作
    MySQL 的一些操作
  • 原文地址:https://www.cnblogs.com/zhenggc/p/13655507.html
Copyright © 2011-2022 走看看