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

免费领云服务器网站优化建议怎么写

免费领云服务器,网站优化建议怎么写,江苏省城乡建设厅网站首页,苏州有实力的软件开发公司项目中有段代码逻辑是个双重for循环,发现数据量大的时候,直接导致数据接口响应超时,这里记录下不断优化的过程,算是抛砖引玉吧~ Talk is cheap,show me your code! 双重for循环优化 1、数据准备2、原始双重for循环3、…

项目中有段代码逻辑是个双重for循环,发现数据量大的时候,直接导致数据接口响应超时,这里记录下不断优化的过程,算是抛砖引玉吧~
Talk is cheap,show me your code!

双重for循环优化

    • 1、数据准备
    • 2、原始双重for循环
    • 3、直接使用双重for循环查询条件,增加break条件
    • 4、使用迭代器来删除内层循环中已使用或判断过的元素,减少循环次数
    • 5、把要筛选的信息写成map集合,遍历List时用map.get(key)来实现检索
    • 6、总结

1、数据准备

Order

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Order {private Integer orderId;private String orderName;
}

OrderDetail

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OrderDetail {private Integer orderDetailId;private Integer orderId;private String orderNums;private String orderAddress;
}

造测试数据

public static List<Order> getOrderTestList() {List<Order> orders = new ArrayList<>();for (int i = 1; i <= 50000; i++) {Order order = new Order();order.setOrderName(UUID.randomUUID().toString());order.setOrderId(i);orders.add(order);}return orders;}public static List<OrderDetail> getOrderDetailTestList() {List<OrderDetail> orderDetails = new ArrayList<>();for (int i = 30000; i >= 1; i--) {OrderDetail orderDetail = new OrderDetail();orderDetail.setOrderAddress(UUID.randomUUID().toString());orderDetail.setOrderId(i);orderDetail.setOrderDetailId(i);orderDetails.add(orderDetail);}return orderDetails;}

2、原始双重for循环

@Testvoid test3() {List<Order> orderTestList = getOrderTestList();List<OrderDetail> orderDetailTestList = getOrderDetailTestList();StopWatch stopWatch = new StopWatch();stopWatch.start();// 直接使用双重for循环查询条件for (Order order : orderTestList) {int orderId = order.getOrderId();for (OrderDetail orderDetail : orderDetailTestList) {if(orderId == orderDetail.getOrderId() ){System.out.println("模拟数据orderAddress 业务处理......" + orderDetail.getOrderAddress());}}}stopWatch.stop();System.out.println("最终耗时" + stopWatch.getTotalTimeMillis());}

执行结果
请添加图片描述

3、直接使用双重for循环查询条件,增加break条件

	@Testvoid test3() {List<Order> orderTestList = getOrderTestList();List<OrderDetail> orderDetailTestList = getOrderDetailTestList();StopWatch stopWatch = new StopWatch();stopWatch.start();// 直接使用双重for循环查询条件,增加break条件for (Order order : orderTestList) {int orderId = order.getOrderId();for (OrderDetail orderDetail : orderDetailTestList) {if(orderId == orderDetail.getOrderId() ){System.out.println("模拟数据orderAddress 业务处理......" + orderDetail.getOrderAddress());break;}}}stopWatch.stop();System.out.println("最终耗时" + stopWatch.getTotalTimeMillis());}

执行结果
请添加图片描述

4、使用迭代器来删除内层循环中已使用或判断过的元素,减少循环次数

	@Testvoid test3() {List<Order> orderTestList = getOrderTestList();List<OrderDetail> orderDetailTestList = getOrderDetailTestList();StopWatch stopWatch = new StopWatch();stopWatch.start();// 使用迭代器来删除内层循环中已使用或判断过的元素,减少循环次数for (Order order : orderTestList) {ListIterator<OrderDetail> orderDetailListIterator = orderDetailTestList.listIterator();int orderId = order.getOrderId();while (orderDetailListIterator.hasNext()) {OrderDetail nextOrderDetail = orderDetailListIterator.next();if(orderId == nextOrderDetail.getOrderId() ){System.out.println("模拟数据orderAddress 业务处理......" + nextOrderDetail.getOrderAddress());orderDetailListIterator.remove();}}}stopWatch.stop();System.out.println("最终耗时" + stopWatch.getTotalTimeMillis());}

执行结果
请添加图片描述

5、把要筛选的信息写成map集合,遍历List时用map.get(key)来实现检索

	@Testvoid test3() {List<Order> orderTestList = getOrderTestList();List<OrderDetail> orderDetailTestList = getOrderDetailTestList();StopWatch stopWatch = new StopWatch();stopWatch.start();//使用stream() 记得一定要判空Map<Integer, String> orderAddressMap =orderDetailTestList.stream().collect(Collectors.toMap(OrderDetail::getOrderId, OrderDetail::getOrderAddress));for (Order order : orderTestList) {int orderId = order.getOrderId();String orderAddress = orderAddressMap.get(orderId);if (StringUtils.hasLength(orderAddress)) {System.out.println("模拟数据orderAddress 业务处理......" + orderAddress);}}if (StringUtils.hasLength(orderAddress)) {System.out.println("模拟数据orderAddress 业务处理......" + orderAddress);}stopWatch.stop();System.out.println("最终耗时" + stopWatch.getTotalTimeMillis());}

测试结果
在这里插入图片描述

6、总结

可以看出,通过迭代删除或者利用map集合特性均能够有效提升查询效率。

http://www.tj-hxxt.cn/news/80433.html

相关文章:

  • 网站开发策划方案浙江网络推广
  • 苏州全网网站建设最近一周国内热点新闻
  • 免费开源的个人网站系统网络推广协议合同范本
  • 做网站到哪里做百度推广退款电话
  • 介休市政府领导分工沈阳百度seo关键词排名优化软件
  • 什么网页可以做网站苏州seo怎么做
  • 构建一个网站上海最新发布最新
  • 做司法亲子鉴定网站今日的新闻
  • 申请网站建设近期新闻热点大事件
  • 可以做进销存的网站系统app宣传推广方案
  • 效果图素材网站百度搜索关键词指数
  • 怎么为自己做的网站申请域名百度快照优化seo
  • 律师做网络推广哪个网站好百度指数总结
  • 有哪些营销型网站推荐网络营销咨询服务
  • 日本 设计网站软文推广收费
  • 安徽网站开发费用网络营销案例及分析
  • 学校做网站有些什么好处seo快速软件
  • 公众平台网站开发哪家好百度竞价托管公司
  • 网站怎么做别名现在搜什么关键词能搜到网站
  • 怎样做网站赚流量seo自然排名关键词来源的优缺点
  • 小蚂蚁page页面模板上海牛巨仁seo
  • 做百度网站每年的费用多少合适扫一扫识别图片
  • 海口网站建设谷歌搜索引擎网址
  • 微信公众号营销公司网络优化方案
  • 网站站做地图软件什么样的人适合做营销
  • app建设网站公司哪家好怎样在百度上免费建网站
  • 邯郸做网站xy0310怎么自己制作网页
  • 优秀企业宣传ppt快推达seo
  • 婚庆网站设计说明书百度推广教程视频教程
  • 网站多语言模块seosem是指什么意思