有趣而简单的两段代码

阅读更多
假如你想写一个小程序,保证字符串首尾两个字符是一样的,你可以如下实现:
	public static boolean isPalindrome(String string) {
		for (int forward = 0, backward = string.length() - 1; forward < string
				.length(); forward++, backward--)
			if (string.charAt(forward) != string.charAt(backward))
				return false;
		return true;
	}


另一种方法,性能好一些,但可读性差一些,如下:
	public static boolean isPalindrome(String string) {
		if (string.length() == 0)
			return true;
		int limit = string.length() / 2;
		for (int forward = 0, backward = string.length() - 1; forward < limit; forward++, backward--)
			if (string.charAt(forward) != string.charAt(backward))
				return false;
		return true;
	}


看一下agile java一书其中的一段话,值得思考:
引用
"While normally you shouldn't worry about performance until it is a problem, an algorithm should be clean. Doing something unnecessarily in an algorithm demonstrates poor understanding of the problem. It can also confuse future developers"


下面是测试的代码:
public void testPalindrome() {
   assertFalse(isPalindrome("abcdef"));
   assertFalse(isPalindrome("abccda"));
   assertTrue(isPalindrome("abccba"));
   assertFalse(isPalindrome("abcxba"));
   assertTrue(isPalindrome("a"));
   assertTrue(isPalindrome("aa"));
   assertFalse(isPalindrome("ab"));
   assertTrue(isPalindrome(""));
   assertTrue(isPalindrome("aaa"));
   assertTrue(isPalindrome("aba"));
   assertTrue(isPalindrome("abbba"));
   assertTrue(isPalindrome("abba"));
   assertFalse(isPalindrome("abbaa"));
   assertFalse(isPalindrome("abcda"));
}

你可能感兴趣的:(performance,IDEA)