关闭

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

385人阅读 评论(0) 收藏 举报
分类:

今天,我在网上做算法题时总是提示“运行超时”,我很纳闷为什么,我一开始程序里用的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];
    }

并没有看出什么端倪。。汗。。麻烦有知道的朋友们能为我解答一下~

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5219次
    • 积分:192
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:8篇
    • 译文:2篇
    • 评论:0条
    文章存档