gpt4 book ai didi

java - 避免 for 循环并尝试使用集合 API(性能)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:34:31 25 4
gpt4 key购买 nike

我有一段来自旧项目的代码。

逻辑(高层次)如下:
用户发送一系列 {id,Xi}其中 id 是数据库中对象的主键。
目的是更新数据库但是Xi的系列值始终唯一

即如果用户发送 {1,X1}在数据库中我们有{1,X2},{2,X1}输入应该被拒绝,否则我们最终会得到重复项,即 {1,X1},{2,X1}即我们有 X1在不同的行中两次。

在较低级别,用户发送一系列封装此信息的自定义对象。

目前,此实现使用“蛮力”,即对输入和 jdbc 结果集进行连续 for 循环以确保唯一性。

我不喜欢这种方法,而且实际的实现有细微的错误,但这是另一回事了。

我正在寻找一种在编码和性能方面都更好的方法。

我的想法是:

  • 创建 Set来自用户的输入列表。如果Set与列表的大小不同,则用户的输入有重复项。到此为止。
  • 从 jdbc 加载数据。
  • 创建 HashMap<Long,String>随着用户的输入。键是主键。
  • 遍历结果集。如果HashMap没有contain与 ResultSet 的行 ID 具有相同值的键,然后将其添加到 HashMap
  • 最后得到HashMap的值为 List .如果它包含重复拒绝输入。

这是我想出的算法。
有比这更好的方法吗? (我假设我自己的算法没有错)

最佳答案

纯粹从性能的角度来看,为什么不让数据库找出重复项(如 {1,X1},{2,X1})?在表中设置唯一约束,然后当更新语句因抛出异常而失败时,捕获它并处理您在这些输入条件下想要执行的操作。如果您需要回滚任何部分更新,您可能还希望将其作为单个事务运行。当然,这是假设您没有任何其他业务规则驱动您未在此处提及的更新。

使用您的算法,您花费了太多时间迭代 HashMapList 以删除重复恕我直言。

关于java - 避免 for 循环并尝试使用集合 API(性能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7798472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com