成都网站建设公司电话厂房外墙设计效果图
web/
2025/9/27 19:16:35/
文章来源:
成都网站建设公司电话,厂房外墙设计效果图,wordpress前台不显示,小程序制作pdf项目中有段代码逻辑是个双重for循环#xff0c;发现数据量大的时候#xff0c;直接导致数据接口响应超时#xff0c;这里记录下不断优化的过程#xff0c;算是抛砖引玉吧~ Talk is cheap,show me your code#xff01; 双重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 ListOrder getOrderTestList() {ListOrder 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 ListOrderDetail getOrderDetailTestList() {ListOrderDetail 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() {ListOrder orderTestList getOrderTestList();ListOrderDetail 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() {ListOrder orderTestList getOrderTestList();ListOrderDetail 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() {ListOrder orderTestList getOrderTestList();ListOrderDetail orderDetailTestList getOrderDetailTestList();StopWatch stopWatch new StopWatch();stopWatch.start();// 使用迭代器来删除内层循环中已使用或判断过的元素减少循环次数for (Order order : orderTestList) {ListIteratorOrderDetail 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() {ListOrder orderTestList getOrderTestList();ListOrderDetail orderDetailTestList getOrderDetailTestList();StopWatch stopWatch new StopWatch();stopWatch.start();//使用stream() 记得一定要判空MapInteger, 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.mzph.cn/web/82926.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!