使用数组查找或if语句是否更好?

时间:2014-08-22 03:11:09

标签: java performance

我正在为我正在做的课程做一个基本的编程任务。其中一项任务是比较两个整数并按照“5小于10”的方式打印。

因为这个练习是一个评论,我假设老师期待if..else if。

我使用java Integer比较方法和数组常量来生成输出。我一般想知道哪种方法更好(在速度,记忆,清晰度等方面)?

示例代码

如果方法:

int a = 5;
int b = 10;
String text;

if (a < b)
  text = "less than";
else if (a > b)
  text = "greater than";
else
  text = "equal to";

System.out.printf("%d is %s %d", a, text, b);

数组方法:

final String[] COMPS = {"less than", "equal to", "greater than"};

int a = 5;
int b = 10;
int cmp = Integer.compare(a, b) + 1;

System.out.printf("%d is %s %d", a, COMPS[cmp], b)

5 个答案:

答案 0 :(得分:5)

为清楚起见,我根本不会将文本分成变量。

if (a < b)
  System.out.printf("%d is less than %d%n", a, b);
else if (a > b)
  System.out.printf("%d is greater than %d%n", a, b);
else
  System.out.printf("%d is equal to %d%n", a, b);

这也使您在句子结构方面具有更大的灵活性,这在其他语言中可能很重要。


  

int cmp = Integer.compare(a,b)+ 1;

这似乎是非常危险的事情,因为它假设未指定的实施细节(当然不会改变,但仍然......)

根据Javadoc,如果x == y,Integer#compare&#34;返回值0;如果x 小于0的值 Ÿ;如果x> 1,则大于0的值 ý&#34 ;.无法保证返回+1或-1。

答案 1 :(得分:4)

您当然可以通过运行数千或数百万次来测量此代码,并查看哪一个更快。但这只会告诉您使用特定版本的JVM在系统中哪一个更快。此测试的获胜者将取决于相对内存访问时间以及编译器和JIT的“智能”。 Java标准无法保证哪种方法更快。但是,第一种方法可能会更快,因为它不需要内存访问。除非此代码对性能至关重要且另一种方法更快,否则您应该明确选择if语句方法。

答案 2 :(得分:1)

我想说String方法更好,因为你只根据比较结果创建一个字符串。而数组方法将实例化一次保存所有字符串所需的内存。

答案 3 :(得分:1)

为了便于阅读,我会使用您的IF语句。然后是条件(?)运算符:

int a = 10;
int b = 10;
String text = (a < b) ? "less than" :  (a > b) ? "greater than" : "equal to";
System.out.printf("%d is %s %d", a, text, b);

答案 4 :(得分:1)

你可以,如果你想,写一个代码,并检查是否有一些明显的时间成本差异。在你的情况下,我测试,它们似乎没有区别,平均为60-100毫秒。

但是,您应该更喜欢编写可读代码,并且您的第一个示例比第二个示例更具可读性。在我看来,这是“更好”。

而且,第二个使用更多内存,因为它创建了一个数组。