探讨:通过循环数组或者集合,插入数据库中没有的数据

简介: 要将一组物品 As 放入盒子 Bs 中,如果盒子有该物品,则不把该物品放入盒子。 即,通过循环数组或者集合,插入数据库中没有的数据。
+关注继续查看

【场景】

要将一组物品 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)
    }
}

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

相关文章
|
3天前
|
存储 Java
数据结构:图文详解顺序表的各种操作(新增元素,查找元素,删除元素,给指定位置元素赋值)
数据结构:图文详解顺序表的各种操作(新增元素,查找元素,删除元素,给指定位置元素赋值)
22 0
|
3月前
删除排序链表中的重复元素
1.先定义一个节点指向该链表的头节点-s,再定义一个节点指向该链表的第二个节点-p. 2.当链表为空或者链表中只有一个节点时返回头节点. 3.当q不为空的时候进入循环,判断p->val是否与s->val是否相同,相同的话,令p = p->next,s->next = p;否则的话往后遍历 。
24 0
|
6月前
|
存储
82. 删除排序链表中的重复元素 II
82. 删除排序链表中的重复元素 II
34 0
|
12月前
关于对象遍历的时候的一些排序问题
关于对象遍历的时候的一些排序问题
关于对象遍历的时候的一些排序问题
|
索引
按顺序遍历表
按顺序遍历表
76 0
遍历表
遍历表
54 0
顺序线性表的插入、删除、合并
顺序线性表的插入、删除、合并 前言 插入 删除 合并
147 0
83_删除排序链表中的重复元素
83_删除排序链表中的重复元素
61 0