习惯每天逛一下论坛,今天发现一个关于重构的帖子
http://www.iteye.com/topic/940121
于是特地自己做了一个测试,排除异常的情况,测试代码如下
package ben.test.performance.ifelse;
import java.util.HashMap;
import java.util.Map;
public class MapIfEnum {
public static final String HK = "HK";
public static final String MACAO = "MC";
public static final String TW = "TW";
public static final String OTHER = "OTHER";
public static void main(String[] args){
// String code = HK;
// String code = MACAO;
// String code = TW;
String code = OTHER;
MapIfEnum test = new MapIfEnum();
long start = 0L + System.currentTimeMillis();
for (int i = 0; i < 1000000; i ++){
test.useIfElse(code);
// test.useEnum(code);
// test.useMap(code);
}
long end = 0L + System.currentTimeMillis();
System.out.println("Used time = " + (end - start));
}
public String useIfElse(String code){
if (HK.equals(code)){
return "中国香港";
} else if (MACAO.equals(code)){
return "中国澳门";
} else if (TW.equals(code)){
return "中国台湾";
} else {
return "其他地区";
}
}
public String useEnum(String code){
return Area.valueOf(code).getDesc();
}
public String useMap(String code){
return areaMap.get(code);
}
enum Area{
HK("中国香港"),
MC("中国澳门"),
TW("中国台湾"),
OTHER("其他地区");
private String desc;
private Area(String desc){
this.desc = desc;
}
public String getDesc(){
return desc;
}
}
public static Map<String, String> areaMap = new HashMap<String, String>();
static {
areaMap.put("HK", "中国香港");
areaMap.put("MC", "中国澳门");
areaMap.put("TW", "中国台湾");
areaMap.put("OTHER", "其他地区");
}
}
做了1,000,000次的循环,最后得到结果大致如下
if..else 首次命中最快15ms, 第二次命中和Map相当23ms,第三此比Enum稍微快一点31ms
Map 基本保持在24ms左右,因为hash code算法的关系每次都几乎一样
Enum 在本次测试中最慢,每次都是大约36ms左右
可见如果1~2次的比较,if..else显然最合适,
但如果比较次数超过3次以上HashMap最为理想
Enum显然要比Map要差一点,不过它的用途主要不是用来比较这个。。。
分享到:
相关推荐
代码中大量的 if else 如何优化 在编程中,我们常常会遇到大量的 if else 语句,这些语句会使得代码变得难以维护和阅读。那么,如何优化这些 if else 语句呢?下面我们来讨论一些常见的优化方法。 首先,让我们看...
在编程中,尤其是在Java开发中,if-else语句经常被用来处理条件判断和分支逻辑。然而,当if-else嵌套过多时,代码的可读性和可维护性都会大大降低。为了提升代码质量,我们可以采取一些优雅的方式来替换if-else结构...
枚举常量可以作为`switch`语句的控制表达式,这是枚举的一个重要优势,因为它提供了比if-else语句更清晰的代码结构: ```java WeekDay today = WeekDay.MONDAY; switch (today) { case MONDAY: System.out....
`if`、`if...else`、`switch`语句用于条件判断,根据条件执行不同的代码块。 6. **循环控制**: `for`、`while`、`do...while`循环用于重复执行某段代码。`for-each`循环适用于遍历集合或数组。 7. **异常处理**...
035 public static enum Mstyle 036 { 037 Line,Curve 038 } 039 040 private Mstyle mstyle=Mstyle.Line; 041 private Point[] mPoints = new Point[100]; 042 043 Context context; ...
1. **基础语法**:包括数据类型(基本类型和引用类型)、变量、运算符、流程控制(if-else, switch, for, while等)、方法定义和调用。 2. **类与对象**:理解面向对象编程的核心概念,如封装、继承、多态。掌握类...
基础包括变量声明、数据类型(如整型、浮点型、字符型和布尔型)、运算符(算术、关系、逻辑、赋值等)以及控制流语句(if-else、switch、for、while循环)。 2. **类和对象**:Java是面向对象的语言,它的基本单位...
enum faulthandler fileinput hashlib http.client idlelib and IDLE importlib inspect json logging math multiprocessing os pathlib pdb pickle pickletools pydoc random re readline ...
5. **控制结构**:Java中的控制结构包括条件语句(if、if-else、switch)、循环语句(for、while、do-while)和跳转语句(break、continue)。这些结构用于控制程序的执行流程。 6. **类和对象**:类是Java面向对象...
5. **控制流程**:Java支持条件语句(if, if-else, switch)、循环(for, while, do-while)以及跳转语句(break, continue)。 6. **异常处理**:Java的异常处理机制使用`try-catch-finally`块,使得程序在遇到...
else if (y > screenRect.bottom - rect.Height()) y = screenRect.bottom - rect.Height(); // 移动窗口 MoveWindow(x, y, rect.Width(), rect.Height(), FALSE); } CDialog::OnMouseMove(nFlags, point); ...
4. **控制结构**:包括顺序结构、选择结构(if...else,switch...case)和循环结构(for,while,do...while)。这些结构用于控制程序的执行流程。 5. **函数**:函数是C++中的可重用代码块,用于实现特定功能。...
4. 流程控制:if...else用于条件判断,switch...case提供多路选择,for、while和do...while循环用于重复执行代码块。 三、函数 函数是可重用的代码块,可以接收参数并返回值。C++标准库提供了一系列内置函数,如...
你可以使用条件语句(`if...else`)或switch语句来根据运算符执行相应的操作。也可以实现一个简单的解析器,用栈来处理运算符优先级,这是基于“后缀表达式”(也称为逆波兰表示法)的方法。 6. **错误处理**:程序...
2. **控制结构**:源代码中可能包含了各种控制结构,如if-else语句、switch语句、for循环、while循环和do-while循环,这些都是编写逻辑代码的关键。 3. **异常处理**:Java使用try-catch-finally块进行异常处理。在...
1. **基础语法**:Java的编程基础,包括变量、数据类型、运算符、流程控制(如if-else、switch、for、while循环)以及方法的定义和调用。 2. **对象与类**:Java的面向对象特性,如类的定义、对象的创建与销毁、...
4. **控制结构**: 包括条件语句(`if...else`,`switch...case`)和循环(`for`,`while`,增强的`for`循环)。 5. **变量与数据类型**: Java有基本数据类型(如`int`,`double`,`boolean`)和引用数据类型(如...
- 条件语句:if,if...else,switch...case用于根据条件执行不同代码块。 - 循环语句:for,while,do...while循环用于重复执行一段代码,直到满足特定条件为止。 - 分支语句:break,continue用于跳出当前循环或...
3. **控制流**:掌握if-else, switch, for, while等语句的使用,以及如何控制程序流程。 4. **类与对象**:理解面向对象编程的基本概念,如封装、继承和多态,以及类的构造器、成员变量和方法。 5. **访问修饰符**...