C\C++\Java字符串拼接比较

C\C++\Java字符串拼接比较:

昨天买好小米盒子,自己折腾了一会然后就教会老妈怎么玩,怎么看还珠格格之后,我闲来无事,突然想起了上次一个项目处理字符串遇到的性能问题,然后就仔细考虑了一下,越考虑发现需要注意的越多,于是开了ubuntu虚拟机测试一下(我的host机器是i7 Q740 四核八线程):
C语言版本是直接用strncpy,纯内存字节流操作
C++第一个版本用到了std::string,用append添加字符传
C++第二个版本用到了std::stringstream,直接ss<<"hello"
Java用StringBuilder

结果是:
C语言运行效率奇高无比,2-3秒
C++std::string,速度9秒,如果注释掉sb.reserve(10000)那么就是11秒
C++std::stringstream,19秒
Java的StringBuilder,也是11秒

曾经测试过其他方法,都是超过30秒而被我取消了:
vector<char>,第二个循环里push_back('h');五次
C语言string.h的strcat和strncat

总结:
本来以为Java速度和C++不是一个数量级的,现在看来,貌似Java速度也非常高,反而是C和C++如果代码写的考虑不周到,那么速度会急剧下降的


int main()
{
    int i,j;
    int num = 1000000;
    time_t t1;
    time(&t1);
    for ( i = 0; i < num; i++) {
        char a[10000]="";
        for( j=0; j<300; j++) {
            int len = strlen("hello");
            strncpy(a+j*5,"hello",len);
        }
    }
    time_t t2;
    time(&t2);
    printf("%d  %d\n",t1,t2);
    printf("%d\n",t2-t1);
}

int main()
{
    int num = 1000000;
    time_t t1;
    time(&t1);
    for (int i = 0; i < num; i++) {
        std::string sb;
        sb.reserve(10000);//这行代码如果注释掉,那么运行时间是11秒
        for(int j=0; j<300; j++) {
            sb.append("hello");
        }
    }
    time_t t2;
    time(&t2);
    std::cout<< t1 <<"  " <<t2 <<"\n";
    std::cout<< t2-t1<<"\n";
}

int main()
{
    int num = 1000000;
    time_t t1;
    time(&t1);
    for (int i = 0; i < num; i++) {
        std::stringstream ss;
        for(int j=0; j<300; j++) {
            ss<<"hello";

        }
    }
    time_t t2;
    time(&t2);
    std::cout<< t1 <<"  " <<t2 <<"\n";
    std::cout<< t2-t1<<"\n";
}

public static void main(String[] args) throws Exception {
	long t1 = System.currentTimeMillis();
	int num = 1000000;
	for (int i = 0; i < num; i++) {
		StringBuilder sb = new StringBuilder();
		for (int j = 0; j < 300; j++) {
			 sb.append("hello");
		}
	}
	long t2 = System.currentTimeMillis();
	System.out.println(t2 - t1);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值