作为一个菜鸟,我对ruby这样的弱类型动态语言和传统的强类型静态语言的性能表现还是蛮感兴趣的。
加之,程序员们热衷的话题就是各个编程语言的性能之争,每个语言都有每个语言的支持者,你争我吵,不亦乐乎。
好了,先上ruby代码(来自osc,不过自己改了一下,让测试的时间是float型的,更加精准的时间展示):
t1 = Time.now.to_f
min = Math.sqrt(1).to_i
max = Math.sqrt(10**14).to_i
def isH(num)
num = num.to_s
return num == num.reverse
end
for num in (min..max)
if isH num
z = num**2
if isH z
puts z
end
end
end
t2 = Time.now.to_f
puts t2-t1 期待的测试开始了,
3轮测试下来,结果如下:
接下来登场的是python,期待他有更好的表现,同样,3轮测试的结果:
代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def isPalindrome(n):
s = str(n)
return s == s[::-1]
def main():
m1 = 1
m2 = 10000000
return [(i, i*i) for i in range(m1,m2) if isPalindrome(i) and isPalindrome(i*i)]
if __name__ == '__main__':
import time
st = time.time()
print(main(), time.time() - st, sep='\n')
最后登场的是java,我想他的成绩一定会让屌丝们兴奋的:
代码:
package cn.iver.test;
/**
* Created with IntelliJ IDEA.
* Author: iver
* Date: 13-4-25
*/
public class Hello {
public static boolean isPlalindrome(String s) {
for (int i = 0; i <= s.length() / 2; i++) {
if (s.charAt(i) != s.charAt(s.length() - 1 - i)) {
return false;
}
}
return true;
}
public static void method(double min, double max) {
min = Math.sqrt(min);
max = Math.sqrt(max);
double y = 0;
for (double x = Math.ceil(min); x < max; x++) {
if (x % 10 > 0) {
y = x * x;
if (y % 10 > 0) {
String xStr = String.valueOf((long) x);
if (isPlalindrome(xStr)) {
String yStr = String.valueOf((long) y);
if (isPlalindrome(yStr)) {
System.out.println(yStr + '(' + xStr + ')');
}
}
}
}
}
}
public static void main(String[] args) {
long t = System.currentTimeMillis();
method(1d, 100000000000000d);
System.out.println(System.currentTimeMillis() - t);
}
}
这次是在IDEA里测试的,jdk是1.7版本64位的,没有截图,直接上结果,(注:此处我省略了详细输出过程):
第一次:983ms;
第二次:999ms;
第三次:996ms;
===================写在最后=====================
机器的配置及环境:win7专业版64位,CUP:core i5 2400 3.1GHZ ;RAM:8G;
从测试可以看出,ruby的性能没有我们想象的那么差,至少和python比起来,不落下风,更何况,我还没有用最新的ruby2.0,所以说:ruby的性能值得期待!