测试代码
for (int j = 0; j < 30; j++) {
long current = System.currentTimeMillis();
for (long i = 0; i < 1000000000; i++) {
getPriority(10);
}
long first = System.currentTimeMillis();
for (long i = 0; i < 1000000000; i++) {
getPriority1(10);
}
long second = System.currentTimeMillis();
System.out.println("first= " + (first - current) + " second= " + (second - first));
}
原方法
private static int getPriority(int cameraType) {
switch (cameraType) {
case 4:
return CameraType.CAMERA_1.getPriority();
case 5:
return CameraType.CAMERA_2.getPriority();
case 6:
return CameraType.CAMERA_3.getPriority();
case 7:
return CameraType.CAMERA_4.getPriority();
case 8:
return CameraType.CAMERA_5.getPriority();
case 9:
return CameraType.CAMERA_6.getPriority();
case 10:
return CameraType.CAMERA_7.getPriority();
default:
return -1;
}
}
private static int getPriority1(int cameraType) {
for (CameraType cameraType1 : CameraType.values()) {
if (cameraType1.getCameraType() == cameraType) {
return cameraType1.getPriority();
}
}
return -1;
}
所用枚举类型
public enum CameraType {
CAMERA_1("相机 1", 4, 0), CAMERA_2("相机 2", 5, 2), CAMERA_3("相机 3", 6, 3), CAMERA_4("相机 4", 7, 4),
CAMERA_5("相机 5", 8, 5), CAMERA_6("相机 6", 9, 6), CAMERA_7("相机 7", 10, 1);
private final String mCameraName;
private final int mCameraType;
private final int mPriority;
CameraType(String name, int cameraType, int priority) {
mCameraName = name;
mCameraType = cameraType;
mPriority = priority;
}
public String getCameraName() {
return mCameraName;
}
public int getCameraType() {
return mCameraType;
}
public int getPriority() {
return mPriority;
}
}
结果
first= 500 second= 8683
first= 536 second= 6801
first= 520 second= 7329
first= 639 second= 7556
first= 562 second= 7279
first= 592 second= 7458
个人感觉,switch 不还是从最开始 case 匹配到最终符合的 case 然后返回的吗?那不就跟 for 循环的匹配办法一样吗!为什么两者速度差一个数量级
for (int j = 0; j < 30; j++) {
long current = System.currentTimeMillis();
for (long i = 0; i < 1000000000; i++) {
getPriority(10);
}
long first = System.currentTimeMillis();
for (long i = 0; i < 1000000000; i++) {
getPriority1(10);
}
long second = System.currentTimeMillis();
System.out.println("first= " + (first - current) + " second= " + (second - first));
}
原方法
private static int getPriority(int cameraType) {
switch (cameraType) {
case 4:
return CameraType.CAMERA_1.getPriority();
case 5:
return CameraType.CAMERA_2.getPriority();
case 6:
return CameraType.CAMERA_3.getPriority();
case 7:
return CameraType.CAMERA_4.getPriority();
case 8:
return CameraType.CAMERA_5.getPriority();
case 9:
return CameraType.CAMERA_6.getPriority();
case 10:
return CameraType.CAMERA_7.getPriority();
default:
return -1;
}
}
private static int getPriority1(int cameraType) {
for (CameraType cameraType1 : CameraType.values()) {
if (cameraType1.getCameraType() == cameraType) {
return cameraType1.getPriority();
}
}
return -1;
}
所用枚举类型
public enum CameraType {
CAMERA_1("相机 1", 4, 0), CAMERA_2("相机 2", 5, 2), CAMERA_3("相机 3", 6, 3), CAMERA_4("相机 4", 7, 4),
CAMERA_5("相机 5", 8, 5), CAMERA_6("相机 6", 9, 6), CAMERA_7("相机 7", 10, 1);
private final String mCameraName;
private final int mCameraType;
private final int mPriority;
CameraType(String name, int cameraType, int priority) {
mCameraName = name;
mCameraType = cameraType;
mPriority = priority;
}
public String getCameraName() {
return mCameraName;
}
public int getCameraType() {
return mCameraType;
}
public int getPriority() {
return mPriority;
}
}
结果
first= 500 second= 8683
first= 536 second= 6801
first= 520 second= 7329
first= 639 second= 7556
first= 562 second= 7279
first= 592 second= 7458
个人感觉,switch 不还是从最开始 case 匹配到最终符合的 case 然后返回的吗?那不就跟 for 循环的匹配办法一样吗!为什么两者速度差一个数量级