习惯每天逛一下论坛,今天发现一个关于重构的帖子
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 .................................. 93 Iteration ............................... 94 do-while ..................................... 95 for ................................................ 95 The...
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; ...
enum faulthandler fileinput hashlib http.client idlelib and IDLE importlib inspect json logging math multiprocessing os pathlib pdb pickle pickletools pydoc random re readline ...
:handshake: swift-enum-properties 结构和枚举数据访问协调一致。 动机 在Swift中,默认情况下,结构数据访问要比枚举数据访问更符合人体工程学。 使用表达点句法,可以在不到一行的范围内访问struct字段: user...
else if(i==1) isfind = 4; else isfind = 5; break; } if(isfind==0) { int isnum = temp[0]-'0'; if(isnum>-1||isnum) isfind = 3; else isfind = 2; } ...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...
If an inline function definition is short, with very little, if any, logic in it, you should put the code in your .h file. For example, accessors and mutators should certainly be inside a class ...
stdafx.h的代码// This is a part of the Microsoft Foundation Classes C++ library. ...// All rights reserved. // // This source code is only intended as a supplement to the // Microsoft Foundation Classes ...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...
enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : ...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...
-t 文件名,指定type map文件,默认为typemap.dat -e 禁止为enum成员加上名空间前缀 -C 仅生成客户端代码 -S 仅生成服务器端代码 -L 不要产生soapClientLib.c和soapServerLib.c文件 -c 产生纯C代码,否则是C++代码...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...
@TemporalType.(DATE,TIME,TIMESTAMP) 分别Map java.sql.(Date, Time, Timestamp). @Lob 注解属性将被持久化为 Blog 或 Clob 类型。具体的java.sql.Clob, Character[], char[] 和 java.lang.String 将被持久化为 ...
enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ...