`
Ben.Sin
  • 浏览: 234169 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

If..else, Map, Enum查询速度对比

    博客分类:
  • Java
阅读更多

习惯每天逛一下论坛,今天发现一个关于重构的帖子

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如何优化.doc

    代码中大量的 if else 如何优化 在编程中,我们常常会遇到大量的 if else 语句,这些语句会使得代码变得难以维护和阅读。那么,如何优化这些 if else 语句呢?下面我们来讨论一些常见的优化方法。 首先,让我们看...

    如何优雅的替换掉Java代码中的if else

    在编程中,尤其是在Java开发中,if-else语句经常被用来处理条件判断和分支逻辑。然而,当if-else嵌套过多时,代码的可读性和可维护性都会大大降低。为了提升代码质量,我们可以采取一些优雅的方式来替换if-else结构...

    enum枚举类的一些代码demo

    枚举常量可以作为`switch`语句的控制表达式,这是枚举的一个重要优势,因为它提供了比if-else语句更清晰的代码结构: ```java WeekDay today = WeekDay.MONDAY; switch (today) { case MONDAY: System.out....

    Java常用代码和方法

    `if`、`if...else`、`switch`语句用于条件判断,根据条件执行不同的代码块。 6. **循环控制**: `for`、`while`、`do...while`循环用于重复执行某段代码。`for-each`循环适用于遍历集合或数组。 7. **异常处理**...

    android折线图

    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; ...

    java面试题.zip

    1. **基础语法**:包括数据类型(基本类型和引用类型)、变量、运算符、流程控制(if-else, switch, for, while等)、方法定义和调用。 2. **类与对象**:理解面向对象编程的核心概念,如封装、继承、多态。掌握类...

    java 基础教程.rar

    基础包括变量声明、数据类型(如整型、浮点型、字符型和布尔型)、运算符(算术、关系、逻辑、赋值等)以及控制流语句(if-else、switch、for、while循环)。 2. **类和对象**:Java是面向对象的语言,它的基本单位...

    python3.6.5参考手册 chm

    enum faulthandler fileinput hashlib http.client idlelib and IDLE importlib inspect json logging math multiprocessing os pathlib pdb pickle pickletools pydoc random re readline ...

    Java的语言基础.rar_java基础

    5. **控制结构**:Java中的控制结构包括条件语句(if、if-else、switch)、循环语句(for、while、do-while)和跳转语句(break、continue)。这些结构用于控制程序的执行流程。 6. **类和对象**:类是Java面向对象...

    java基础API.rar

    5. **控制流程**:Java支持条件语句(if, if-else, switch)、循环(for, while, do-while)以及跳转语句(break, continue)。 6. **异常处理**:Java的异常处理机制使用`try-catch-finally`块,使得程序在遇到...

    拖动没有标题栏的窗体

    else if (y &gt; screenRect.bottom - rect.Height()) y = screenRect.bottom - rect.Height(); // 移动窗口 MoveWindow(x, y, rect.Width(), rect.Height(), FALSE); } CDialog::OnMouseMove(nFlags, point); ...

    C++程序设计基础

    4. **控制结构**:包括顺序结构、选择结构(if...else,switch...case)和循环结构(for,while,do...while)。这些结构用于控制程序的执行流程。 5. **函数**:函数是C++中的可重用代码块,用于实现特定功能。...

    C++初学者基础教程

    4. 流程控制:if...else用于条件判断,switch...case提供多路选择,for、while和do...while循环用于重复执行代码块。 三、函数 函数是可重用的代码块,可以接收参数并返回值。C++标准库提供了一系列内置函数,如...

    英文计算加减法

    你可以使用条件语句(`if...else`)或switch语句来根据运算符执行相应的操作。也可以实现一个简单的解析器,用栈来处理运算符优先级,这是基于“后缀表达式”(也称为逆波兰表示法)的方法。 6. **错误处理**:程序...

    19个经典java小程序源代码合集.rar

    2. **控制结构**:源代码中可能包含了各种控制结构,如if-else语句、switch语句、for循环、while循环和do-while循环,这些都是编写逻辑代码的关键。 3. **异常处理**:Java使用try-catch-finally块进行异常处理。在...

    thinking java 3 ch (1-11).pdf

    1. **基础语法**:Java的编程基础,包括变量、数据类型、运算符、流程控制(如if-else、switch、for、while循环)以及方法的定义和调用。 2. **对象与类**:Java的面向对象特性,如类的定义、对象的创建与销毁、...

    Java基础 121例练习示例

    4. **控制结构**: 包括条件语句(`if...else`,`switch...case`)和循环(`for`,`while`,增强的`for`循环)。 5. **变量与数据类型**: Java有基本数据类型(如`int`,`double`,`boolean`)和引用数据类型(如...

    C++笔记

    - 条件语句:if,if...else,switch...case用于根据条件执行不同代码块。 - 循环语句:for,while,do...while循环用于重复执行一段代码,直到满足特定条件为止。 - 分支语句:break,continue用于跳出当前循环或...

    java笔试题

    3. **控制流**:掌握if-else, switch, for, while等语句的使用,以及如何控制程序流程。 4. **类与对象**:理解面向对象编程的基本概念,如封装、继承和多态,以及类的构造器、成员变量和方法。 5. **访问修饰符**...

Global site tag (gtag.js) - Google Analytics