1. 为什么需要替代双循环?
在Java开发中,嵌套循环(双循环)是初学者常用的数据处理方式,但它的时间复杂度是O(n²),当数据量增大时性能会急剧下降。我最近在重构一个纺织行业的生产计划系统时,就遇到了这样的性能瓶颈。
原始代码需要统计每个产品的总产量,采用了典型的双循环结构:外层遍历生产计划,内层遍历产量记录。当计划数量达到1000条,每条计划对应100条产量记录时,循环次数将达到10万次!这种暴力遍历的方式显然不适合生产环境。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Map替代方案的核心思路
2.1 哈希表的优势
利用HashMap的O(1)查询特性,我们可以将时间复杂度从O(n²)降到O(n)。具体做法是:
- 先将所有产量记录按产品名称分组存储到Map中
- 遍历生产计划时,直接从Map获取对应产品的记录集合
java复制Map<String, List<RecordQtyItem>> itemMap = allItems.stream()
.collect(Collectors.groupingBy(RecordQtyItem::getProductName));
这个预处理步骤的时间复杂度是O(n),后续每次查询都是O(1),整体效率显著提升。
2.2 具体实现解析
让我们拆解示例代码的关键部分:
java复制for (WeavingPlanning planning : weavingPlanningList) {
List<RecordQtyItem> items = itemMap.get(planning.getId());
if (items == null) { continue; }
BigDecimal totalQty1 = BigDecimal.ZERO;
for (RecordQtyItem item : items) {
BigDecimal qty = item.getModifyQty() != null ?
item.getModifyQty() : BigDecimal.ZERO;
totalQty1 = totalQty1.add(qty);
}
