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 效率是差不多的。



猜你喜欢

转载自blog.csdn.net/jiayu8706/article/details/36178239