Java if else 与 switch 测速

今天做一个压缩数据的读取操作,里面有一个判断比较多的地方。

我特意用 switch 与 if else 结构 测速了速度。

   通过多次的结果:

85000 条数据15个字段。取3次的平均值,if else 950 毫秒左右、 switch 950 毫秒左右。 写法如下:

if else 我尽量把常用的信息靠前写的。

/**
* 读取一个字段信息
*/
private void readOneField(Meta<BasedataField> meta, Data<BasedataField> data, Map<String,Object> rsmap,
BasedataField field){
FieldIndex<BasedataField> fi = meta.getFileIndex(field.getName());
switch(fi.getField().getType()){
case Types.CHAR:
case Types.VARCHAR:
case Types.NVARCHAR:
rsmap.put(field.getName(), data.getStringArray()[fi.getIndex()]);
break;
case Types.NUMERIC:
case Types.DOUBLE:
rsmap.put(field.getName(), data.getDoubleArray()[fi.getIndex()]);
break;
case Types.INTEGER:
rsmap.put(field.getName(), data.getIntArray()[fi.getIndex()]);
break;
case Types.DATE:
rsmap.put(field.getName(), data.getDateArray()[fi.getIndex()]);
break;
case Types.BIT:
rsmap.put(field.getName(), data.getByteArray()[fi.getIndex()]);
break;
case Types.SMALLINT:
rsmap.put(field.getName(), data.getShortArray()[fi.getIndex()]);
break;
case Types.BIGINT:
rsmap.put(field.getName(), data.getLongArray()[fi.getIndex()]);
break;
case Types.FLOAT:
rsmap.put(field.getName(), data.getFloatArray()[fi.getIndex()]);
break;
default:
throw new IllegalArgumentException("无效的数据类型:" + fi.getField().getType() + " field name="
+ fi.getField().getName());
}
}


/**
* 读取一个字段信息
*/
private void readOneField2(Meta<BasedataField> meta, Data<BasedataField> data, Map<String,Object> rsmap,
BasedataField field){
FieldIndex<BasedataField> fi = meta.getFileIndex(field.getName());
if(fi.getField().getType() == Types.CHAR || fi.getField().getType() == Types.VARCHAR
|| fi.getField().getType() == Types.NVARCHAR)
rsmap.put(field.getName(), data.getStringArray()[fi.getIndex()]);
else if(fi.getField().getType() == Types.NUMERIC || fi.getField().getType() == Types.DOUBLE)
rsmap.put(field.getName(), data.getDoubleArray()[fi.getIndex()]);
else if(fi.getField().getType() == Types.INTEGER)
rsmap.put(field.getName(), data.getIntArray()[fi.getIndex()]);
else if(fi.getField().getType() == Types.DATE)
rsmap.put(field.getName(), data.getDateArray()[fi.getIndex()]);
else if(fi.getField().getType() == Types.BIT)
rsmap.put(field.getName(), data.getByteArray()[fi.getIndex()]);
else if(fi.getField().getType() == Types.SMALLINT)
rsmap.put(field.getName(), data.getShortArray()[fi.getIndex()]);
else if(fi.getField().getType() == Types.BIGINT)
rsmap.put(field.getName(), data.getLongArray()[fi.getIndex()]);
else if(fi.getField().getType() == Types.FLOAT)
rsmap.put(field.getName(), data.getFloatArray()[fi.getIndex()]);
else
throw new IllegalArgumentException("无效的数据类型:" + fi.getField().getType() + " field name="
+ fi.getField().getName());
}


所以我觉的 if else 与switch 效率是差不多的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值