gpt4 book ai didi

java - 一个大的 switch 语句还是几个小的 switch 语句?

转载 作者:行者123 更新时间:2023-12-01 22:48:34 28 4
gpt4 key购买 nike

我想知道一个大的 switch 语句和几个小的 switch 语句之间是否有性能差异。

包含数百个案例的大型 switch 语句。

switch(quest){
case 1: quest1(); break;
case 2: quest2(); break;
.
.
.
case 196: quest196(); break;
case 197: quest197(); break;
.
.
.
}

或者几个较小的 switch 语句,每个语句有 30 个案例。

if (quest <= 30) {
switch (quest) {
case 1: quest1(); break;
case 2: quest2(); break;
case 3: quest3(); break;
.
.
case 30: quest30(); break;
default:
return;
}
} else if (quest <= 60) {
switch (quest) {
case 31: quest31(); break;
case 32: quest32(); break;
case 33: quest33(); break;
.
.
.
case 60: quest60(); break;
default:
return;
}
}
.
.
.

另外,我知道反射会更容易编码,但这会导致很大的开销吗?

类似这样的东西。

try {
Method method =Logic.class.getMethod("quest"+quest);
method.invoke(this);
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

提前致谢。

最佳答案

大型 switch 与包含较小的 if/then/else 语句链之间的区别switch 是指单个 switch 将在一次查找中找到要执行的代码,而条件链在到达 switch< 之前可能需要多次单独检查 利益声明。一旦找到 switch 语句,几乎无论有多少个 case 标签,执行调度所需的时间都大致相同。单个 switch 语句也更具可读性,因此我更喜欢它而不是条件链。

虽然反射确实有开销,但这并不可怕,因此如果您的 questNNN 方法不是非常快,反射的开销不会有太大影响。您甚至可以通过准备一个 Method 对象数组来加速它,并预先填充它以避免 Logic.class.getMethod("quest"+quest) 调用您发送调用的时间。

最后,您可以创建一个 Runnable 对象数组,并将 questNNN 的调用封装在其中:

Runnable[] dispatch = new Runnable[] {
new Runnable() { public void run() { quest0(); } }
, new Runnable() { public void run() { quest1(); } }
, new Runnable() { public void run() { quest2(); } }
, new Runnable() { public void run() { quest3(); } }
, new Runnable() { public void run() { quest4(); } }
...
, new Runnable() { public void run() { quest59(); } }
, new Runnable() { public void run() { quest60(); } }
};

现在您可以调用 dispatch[NNN].run() 来调用 questNNN 方法。

关于java - 一个大的 switch 语句还是几个小的 switch 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026780/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com