Java 垂直打印字符串!在时间和复杂性方面,哪种方法是最好的?
我正在写3种方法,可以将输入字符串垂直打印一行。但我不知道最好的方法是什么,因为使用System.nano进行基准测试时,时间会有很大的变化,我的意思是,如果我计算流程开始和结束之间的时间差。 请建议哪一个最好或更好,根据你的知识发表你的看法 代码片段1Java 垂直打印字符串!在时间和复杂性方面,哪种方法是最好的?,java,string,Java,String,我正在写3种方法,可以将输入字符串垂直打印一行。但我不知道最好的方法是什么,因为使用System.nano进行基准测试时,时间会有很大的变化,我的意思是,如果我计算流程开始和结束之间的时间差。 请建议哪一个最好或更好,根据你的知识发表你的看法 代码片段1 /** * Prints all the characters in the argument string vertically using loop * @param str */ public static void toVertS
/**
* Prints all the characters in the argument string vertically using loop
* @param str
*/
public static void toVertStringLoop(String str){
if(str != null && !"".equals(str)){
int strLen = str.length();
for (int i=0; i<strLen; i++){
System.out.println(str.charAt(i));
}
}
}
代码片段3
/**
* Prints all the characters in the argument string vertically using for-each loop
* @param str
*/
public static void toVerticalStringIterator(String str){
//for-each loop needs array or Iterator instance
for(char ch : str.toCharArray()){
System.out.println(ch);
}
}
代码段3更好。因为代码段2包含递归方法调用,其中JVM必须维护一个堆栈,该堆栈会降低性能并增加JVM的额外开销,而代码段1的效果与代码段3相同,但性能略有下降,因为每个循环读取:
您已经获得了所有代码。测试它并告诉我们!!我猜第一个很可能会排在第一位。您也可以尝试对其进行缓冲,只进行一次System.out调用。在比较其他方法的处理时间时,使用递归是处理单个数据的最佳方法。这个问题更适合System.out.println,它将占用最多的时间。为了更好地进行基准测试,请使用StringBuilder并将其内容输出一次。sidenote:if str!=null&&!。equalstr可以写得更短,就好像!。equalsstr,因为equals检查空值。
/**
* Prints all the characters in the argument string vertically using for-each loop
* @param str
*/
public static void toVerticalStringIterator(String str){
//for-each loop needs array or Iterator instance
for(char ch : str.toCharArray()){
System.out.println(ch);
}
}