如何将代码中insideIsGreater等整型变量改为布尔值优化效率
修改后完全对齐原有逻辑的代码
int amountPassed = 0; // 原整型标记0对应false,1对应true,初始状态都为未触发 boolean insideIsGreater = false; boolean outsideIsGreater = false; for (Measurement measurement : measurements) { double outsideTemp = measurement.getOutsideTemp(); double insideTemp = measurement.getInsideTemp(); if (outsideTemp > insideTemp) { // 原判断outsideIsGreater == 0等价于判断标记为未触发 if (!outsideIsGreater) { amountPassed++; // 更新状态为已触发对应模式 outsideIsGreater = true; insideIsGreater = false; } } else { if (insideTemp > outsideTemp) { // 原判断insideIsGreater == 0等价于判断标记为未触发 if (!insideIsGreater) { amountPassed++; insideIsGreater = true; outsideIsGreater = false; } } } }
核心修改说明
原代码中的两个整型变量本质是状态标记,仅用来表示「是否处于对应温度更高的连续状态」,和布尔值的语义完全匹配,修改为布尔类型后不会带来额外性能开销,同时代码可读性大幅提升,更便于后续维护:
- 变量定义层面:两个标记变量从
int类型改为boolean类型,初始值false对应原来的初始值0,表示当前未处于对应温度更高的连续状态 - 判断逻辑层面:原来的
outsideIsGreater == 0等价于布尔值取反!outsideIsGreater,insideIsGreater == 0等价于!insideIsGreater - 状态更新层面:原来的赋值
1改为赋值true,赋值0改为赋值false - 原有逻辑的所有行为完全保留:温度相等的场景不会触发计数,也不会修改状态标记,和原代码效果完全一致
可选优化(不改变原有逻辑的前提下简化代码)
由于两个布尔标记是互斥的(同一时间最多只有一个为true),可以合并为单个状态变量进一步简化:
import java.util.Objects; int amountPassed = 0; // null表示初始状态,true表示上次是室外温度更高,false表示上次是室内温度更高 Boolean lastIsOutsideGreater = null; for (Measurement measurement : measurements) { double outsideTemp = measurement.getOutsideTemp(); double insideTemp = measurement.getInsideTemp(); if (outsideTemp == insideTemp) { continue; } boolean currentIsOutsideGreater = outsideTemp > insideTemp; if (!Objects.equals(currentIsOutsideGreater, lastIsOutsideGreater)) { amountPassed++; lastIsOutsideGreater = currentIsOutsideGreater; } }
内容的提问来源于stack exchange,提问作者user16968684
相关产品推荐
相关产品推荐

