【发布时间】:2021-12-07 09:12:00
【问题描述】:
通常,在我在学校遇到的问题中,有些问题希望我们使用 switch case。尽管为了更短的代码,我总是使用数组作为此类问题的替代方案。
因此,使用 Switch-Statement 的解决方案将如下所示:
String day;
int dayNum = n%7; //n is an input
switch(dayNum){
case 0:
day = "Sunday";
break;
case 1:
day = "Monday";
break;
case 2:
day = "Tuesday";
break;
case 3:
day = "Wednesday";
break;
case 4:
day = "Thursday";
break;
case 5:
day = "Friday";
break;
case 6:
day = "Saturday";
break;
}
System.out.println("Today is " + day);
使用数组作为替代方案的解决方案如下所示:
int dayNum = n%7; //n is an input
String[] day = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
System.out.println("Today is " + day[dayNum]);
第二个例子是我通常喜欢使用的那种代码。
我想问的是,这两种解决方案在内存和时间复杂度方面的比较如何?
【问题讨论】:
-
第一个具有恒定的时间和空间,因为它是在编译时构建的跳转表;第二个具有线性时间和空间,因为它每次都在构造数组。您可以通过构造一次来避免数组构造,并将其存储在一些不可变的类型中(例如,具有不可修改值的
List<String>)。但在性能方面,它可能不会产生显着差异.. -
您对切换版本的真正反对意见是什么?只是需要更多的行吗?
-
@AndyTurner 线性与什么成正比?一周的天数?
-
正如 Andy 已经说过的,这两种方法之间的性能差异不会那么显着,除非您有 非常 高性能要求,否则我会选择更易于阅读的版本,理解和维护。
-
“我的代码目标是让它们更短。但有人告诉我,并非所有更短的代码在性能方面也更好。” - 是的,更短并不总是等于更快。实际上,当您考虑开发人员性能 时,有时short 会更慢(更难理解,更容易出错)。在这里,“更短”应该被翻译为“不要不必要地重复相似的部分”和“将代码分成更小、更容易理解的块(方法)”。
标签: java arrays switch-statement