当前位置: 首页 > wzjs >正文

秦皇岛网站开发报价济南网站建设 小程序

秦皇岛网站开发报价,济南网站建设 小程序,查询食品注册商标查询官网,蝙蝠侠大连网络营销在工作中,经常性的会出现在两张表中查找相同ID的数据,许多开发者会使用两层for循环嵌套,虽然实现功能没有问题,但是效率极低,一下是一个简单的优化过程,代码耗时凑从26856ms优化到了748ms。 功能场景 有两…

在工作中,经常性的会出现在两张表中查找相同ID的数据,许多开发者会使用两层for循环嵌套,虽然实现功能没有问题,但是效率极低,一下是一个简单的优化过程,代码耗时凑从26856ms优化到了748ms。

功能场景


有两份List类型的数据,分别是UestList(用户表)和AccountList(账户表),要根据用户的id从AccountList表中查找对应的账户信息,并进行后续的处理,示例如下:

存数据(伪代码):5w条user数据,3w条Account数据 

 @Dataclass User{private Long userId;private String name;}@Dataclass Account{private Long userId;private String content;}public class NestedLoopOptimization{public static List<User> getUserList(){List<User> users =new ArrayList<>();for(inti =1; i <=50000; i++) {User user =newUser();user.setName(UUID.randomUUID().toString());user.setUserId((long) i);users.add(user);}return users;}public static List<UserMemo> getAccountTestList(){List<Account> accountList =newArrayList<>();for(inti =30000; i >=1; i--) {Account account =new Account();account.setContent(UUID.randomUUID().toString());account.setUserId((long) i);accountList.add(account);}return accountList;}// ... 后续代码
最直接的实现方式(未优化的代码):
public static void nestedLoop(List<User> usersList, List<UserMemo> accountList) {for (User user : usersList) {Long userId = user.getUserId();for (Account account : accountList) {if (userId.equals(account.getUserId())) {String content = account.getContent();// System.out.println("模拟数据content 业务处理......" + content); // 避免打印影响测试结果}}}
}

 耗时:约数万毫秒,效率很低,数据量小的话无关紧要,如果随着系统的迭代数据量骤增的时候,就会极其耗时。

第一步优化:添加break 

每个userId在AccountList中只有一条对应的数据,所以找到匹配项之后就可以跳出内循环:

public static void nestedLoop(List<User> usersList, List<UserMemo> accountList) {for (User user : usersList) {Long userId = user.getUserId();for (Account account : accountList) {if (userId.equals(account.getUserId())) {String content = account.getContent();// System.out.println("模拟数据content 业务处理......" + content); // 避免打印影响测试结果break;}}}
}

第一步优化结束之后任需要很多耗时,但是比起嵌套循环好很多。

第二步优化:使用Map优化 

public static void mapOptimizedLoop(List<User> userTestList, List<UserMemo> accountList) {Map<Long, String> contentMap = accountList.stream().collect(Collectors.toMap(UserMemo::getUserId, UserMemo::getContent));for (User user : userTestList) {Long userId = user.getUserId();String content = contentMap.get(userId);if (StringUtils.hasLength(content)) {// System.out.println("模拟数据content 业务处理......" + content); // 避免打印影响测试结果}}}

做以上优化之后,耗时显著减少,通常在数百毫秒级别。

原理:

        两层 for 循环嵌套的时间复杂度为 O(n*m),其中 n 和 m 分别为两个列表的长度。使用 Map 后,get 操作的时间复杂度接近 O(1),整体时间复杂度降为 O(n+m),避免了内循环的重复遍历。HashMap 的 get 方法内部使用了 getNode 方法来查找键值对。getNode 方法利用哈希表结构,快速定位到目标键值对。虽然在极端情况下(所有键的哈希值都相同),getNode 的时间复杂度会退化为 O(n),但在实际应用中,哈希冲突的概率很低,HashMap 的 get 操作效率通常很高。因此无需过于担心 O(n) 的最坏情况。 

        通过以上优化之后,可以显著的提高代码的执行效率,已经其健壮性,尤其是在处理大数据量的时候,使用Map优化,可以带来巨大的性能提升,避免了不必要的计算,从而实现了代码的性能。


文章转载自:

http://1PEWgmNr.pqrhb.cn
http://LNUhVu6s.pqrhb.cn
http://AgaPEs1O.pqrhb.cn
http://89sWBluH.pqrhb.cn
http://33z5HCYc.pqrhb.cn
http://6uXgkXsZ.pqrhb.cn
http://BDAe7Uf5.pqrhb.cn
http://BEXfepWg.pqrhb.cn
http://HuHpCzwm.pqrhb.cn
http://4qrzJd7W.pqrhb.cn
http://qLxnesNL.pqrhb.cn
http://Z93a7tpo.pqrhb.cn
http://m9oL9XpM.pqrhb.cn
http://T4IMyY87.pqrhb.cn
http://UvatX8ZB.pqrhb.cn
http://ISOlGOrO.pqrhb.cn
http://1fCae2SV.pqrhb.cn
http://p7lbaD5G.pqrhb.cn
http://OLjqODYP.pqrhb.cn
http://6cLkTAWy.pqrhb.cn
http://nd2P8E8l.pqrhb.cn
http://YOt0W2FO.pqrhb.cn
http://1JV3rhf1.pqrhb.cn
http://N3462Lkv.pqrhb.cn
http://QDoxkzv0.pqrhb.cn
http://3eExLIfq.pqrhb.cn
http://oiqfMDCX.pqrhb.cn
http://8dTbmIRI.pqrhb.cn
http://7kHSbKv0.pqrhb.cn
http://qQFn9dKg.pqrhb.cn
http://www.dtcms.com/wzjs/699392.html

相关文章:

  • 棋牌 彩票网站建设手机网站开发注意的问题
  • 东莞网站建设网站东莞网站设计制作
  • 谷歌怎么推广自己的网站手机制作报价单app
  • 深圳市城乡建设部网站首页在线视频下载网站如何做
  • js网站跳转代码ui网页设计技巧
  • 大同建设银行保安招聘网站做网站服务器什么配置
  • 如何屏蔽网站ip永久免费的财务软件
  • 新手可以自己学做网站设计吗怎么创建网页的快捷方式
  • 网站制作需要多少钱新闻网站推广软文代发
  • 建各企业网站多少钱做打折网站如何
  • 可以做投票的网站网站设计专业公司
  • 深圳做网站(官网)手机微信客户端网站建设
  • 建立网站平台网页设计提升班有哪些
  • 怎么在网上接网站建设前端做网站需要
  • 一般请人做网站和app多少钱wordpress title标签
  • 手机网站建站价格成都网站登记备案查询
  • 建设网站上传代码网站功能建设模块
  • 上海网站建设公司哪个好北京互联网公司排名
  • 陕西省交通建设公司网站wordpress页面怎么切换
  • wordpress php推送惠州seo关键字优化
  • 珠海做网站那家好huntt wordpress主题
  • 请问如何做网站火车头发布模块wordpress5.0
  • 网站概要设计模板网页设计怎么把图片放在指定位置
  • 济南网站建设套餐赣州市建设工程造价管理网站
  • 网站建设实训心得php黑糖主题3.0wordpress
  • 河南省濮阳市建设局网站做佣金单网站
  • 企业网站 seo怎么做wordpress公司企业
  • 慈溪高端网站设计高邮建设局网站
  • 英德市住房城乡建设局网站域名交易的安全措施
  • 设计师交流网站中国工程网查询