C\C++\Java字符串拼接比较
来源:互联网 发布:jquery高级编程在线 编辑:程序博客网 时间:2024/06/14 01:42
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++如果代码写的考虑不周到,那么速度会急剧下降的
昨天买好小米盒子,自己折腾了一会然后就教会老妈怎么玩,怎么看还珠格格之后,我闲来无事,突然想起了上次一个项目处理字符串遇到的性能问题,然后就仔细考虑了一下,越考虑发现需要注意的越多,于是开了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);}
- C\C++\Java字符串拼接比较
- C++/C 字符串拼接
- C 字符串拼接显示
- C 如何拼接字符串
- C语言字符串拼接
- C中多个宏字符串拼接
- C语言 字符串常用函数(计算长度,拷贝,拼接,比较)
- C++、Java、python 字符串比较
- Java 字符串拼接效率比较
- Java 字符串拼接效率比较
- c语言,strcat(),字符串拼接
- objective-C中的字符串拼接
- Objective-c 字符串的拼接
- Java中三种方法拼接字符串时间比较
- Java字符串拼接方式性能比较
- Java 字符串拼接方式性能比较
- Java字符串拼接三种方式比较
- C#,C++,Java比较
- realoj 110最多有几个回文子串
- js处理json注意了
- panabit web密码忘记后的解决方法
- 如何比较这两个字符串是否相等?
- 以deque为例详细解析容器、迭代器
- C\C++\Java字符串拼接比较
- 【7】Rotate matrix by 90 degrees
- 数据挖掘相关会议介绍
- Android程序的退出终于完美解决,兼容所有SDK
- Linux中查看系统资源占用情况的命令
- Visual Assist X添加默认包含路径+支持VS2010高亮显示CUDA代码(Windows 7)
- Unity3D组件之 Input输入控制器教程
- 【8】set matrix's elements to 0
- error: device not found解决