比较String[i].charAt(j)与char[i][j]的运行时间

今天,我在网上做算法题时总是提示“运行超时”,我很纳闷为什么,我一开始程序里用的String[].charAt(j),后来我开始尝试先将String ->toCharArray(),在利用char[][]进行获取字符,效果明显提升。

我这里用一维比较了下:


import java.util.Scanner ;

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner( System.in ) ;
		String str = new String() ;
		str = sc.next() ;
		
		while( !str.equals("") ) {
			/* 使用String[i].charAt(j)获取字符 */
			long t1 = (long) System.currentTimeMillis() ;
			for( int i = 0; i < str.length(); i ++ ) 
				System.out.print( str.charAt(i) ) ;
			System.out.println();
			long t2 = (long) System.currentTimeMillis() ;
			long time1 = t2-t1 ;
			System.out.println(time1 + "ms");
			
			
			/* 先将String.toCharArray(),再利用char[i][j]获取字符 */
			long t3 = (long) System.currentTimeMillis() ;
			char[] ch = str.toCharArray() ;
			for( int i = 0; i < ch.length;  i ++ ) 
				System.out.print( ch[i] ) ;
			System.out.println();
			long t4 = (long) System.currentTimeMillis() ;
			long time2 = t4-t3 ;
			System.out.println(time2 + "ms");
			
			System.out.println("--------------------------------------");
			str = sc.next() ;
		}
	}

}



我输入几个字符串结果截图:



当输入字符串达到133333长度时运行时间 String.charAt比toCharArray后的字符数组将近要慢两倍以上!(当String.length()过长时我的eclipse结果会闪一下就没了,所以我用调试看的时间差)




我在琢磨原因,感觉时间差有两个原因:

1. String.length()与char.length计算时间有别     

2. charAt(i)与char [i] 时间有别

所以稍稍修改了一下程序,让他们都输出同样长度的字符(这里以100000长度为例),然后我输入刚才长度为133333长度的字符串

import java.util.Scanner ;

public class test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner( System.in ) ;
		String str = new String() ;
		str = sc.next() ;
		
		while( !str.equals("") ) {
			/* 使用String[i].charAt(j)获取字符 */
			long t1 = (long) System.currentTimeMillis() ;
			for( int i = 0; i < 100000; i ++ ) 
				System.out.print( str.charAt(i) ) ;
			System.out.println();
			long t2 = (long) System.currentTimeMillis() ;
			long time1 = t2-t1 ;
			System.out.println(time1 + "ms");
			
			
			/* 先将String.toCharArray(),再利用char[i][j]获取字符 */
			long t3 = (long) System.currentTimeMillis() ;
			char[] ch = str.toCharArray() ;
			for( int i = 0; i < 100000;  i ++ ) 
				System.out.print( ch[i] ) ;
			System.out.println();
			long t4 = (long) System.currentTimeMillis() ;
			long time2 = t4-t3 ;
			System.out.println(time2 + "ms");
			
			System.out.println("--------------------------------------");
			str = sc.next() ;
		}
	}

}


结果截图:

结果显示time1 减少了26ms,time2增加了29ms(这里好奇怪~),可见charAt(i)明显还是比toCharArray后[i]慢。


这里就有一个问题了:为什么?

我查看charAt的源码:

 public char charAt(int index) {
        if ((index < 0) || (index >= value.length)) {
            throw new StringIndexOutOfBoundsException(index);
        }
        return value[index];
    }

并没有看出什么端倪。。汗。。麻烦有知道的朋友们能为我解答一下~
阅读更多
版权声明:本文为博主原创文章,转载时请附上本博文源链接及博文内引用其他博文链接。 https://blog.csdn.net/Gohnn/article/details/51543087
个人分类: Java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

比较String[i].charAt(j)与char[i][j]的运行时间

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭