`

字符串累加 - 性能优化

 
阅读更多
1. 测试代码:

package boke.string;

/**
 * 字符串累加与性能优化
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
public class AppendString {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		final int N = 100000;

		long a1 = System.currentTimeMillis();
		String s1 = "";
		for (int i = 1; i <= N; i++) {
			s1 += "#";
		}
		long a2 = System.currentTimeMillis();
		System.out.println("用操作符串联两个字符串: " + (a2 - a1) + "ms");

		StringBuffer sbf = new StringBuffer();
		a1 = System.currentTimeMillis();
		for (int i = 1; i <= N; i++) {
			sbf.append("#");
		}
		a2 = System.currentTimeMillis();
		System.out.println("用StringBuffer串联两个字符串: " + (a2 - a1) + "ms");

		StringBuilder sbl = new StringBuilder();
		a1 = System.currentTimeMillis();
		for (int i = 1; i <= N; i++) {
			sbl.append("#");
		}
		a2 = System.currentTimeMillis();
		System.out.println("用StringBuilder串联两个字符串: " + (a2 - a1) + "ms");
	}

}

2. 结果输出:

用操作符串联两个字符串: 22625ms
用StringBuffer串联两个字符串: 0ms
用StringBuilder串联两个字符串: 32ms

3. 说明:

(1) String str = "first string";
    str = str + "second string";

    上面的字符串"first string"创建后是无法改变的,而它的引用却可以改变。
这个字符串的引用是str,它最初指向字符串"first string",在上面的代码中它
被改变成指向str与"second string"串联后的新的字符串。

(2) String str = "first string";
    StringBuffer sbf = new StringBuffer(str);
    sbf.append("second string");
    str = sbf.toString();

    上面代码的意思是:将两个字符串串联后并且拷贝到一个临时字符串缓冲区变量中。

因此有一个应用String类的基本规则:最好通过StringBuffer来构建一个字符串对象。这样可以获得更好的系统性能。















0
1
分享到:
评论
2 楼 maozj 2010-05-31  
mercyblitz 写道
这个测试都不科学,结论能科学吗?

测试应该相对独立。

引用

用操作符串联两个字符串: 22625ms
用StringBuffer串联两个字符串: 0ms
用StringBuilder串联两个字符串: 32ms


你无法知道何时发现了GC,那个时间不能忽略。


呵呵...你太敬业了~~~
最好通过StringBuffer来构建一个字符串对象。这样可以获得更好的系统性能。
1 楼 mercyblitz 2010-05-31  
这个测试都不科学,结论能科学吗?

测试应该相对独立。

引用

用操作符串联两个字符串: 22625ms
用StringBuffer串联两个字符串: 0ms
用StringBuilder串联两个字符串: 32ms


你无法知道何时发现了GC,那个时间不能忽略。

相关推荐

    JS字符串累加Array不一定比字符串累加快(根据电脑配置)

    传统的字符串累加方法是使用`+`运算符,然而,随着字符串长度的增长,这种方法的性能可能会下降。这主要是因为每次使用`+`拼接字符串时,JavaScript都会创建一个新的字符串对象,这在处理大量数据时会带来显著的内存...

    1.二进制字符串转十进制数值_labview_二进制转十进制_

    在实际应用中,可能还需要考虑一些额外的问题,比如数据验证(确保输入的是有效的二进制字符串)、错误处理(处理除法溢出、负数等特殊情况)、性能优化(对于大量数据的快速转换)等。这些都是提高代码质量、可靠性...

    JavaScript截取中文字符串

    3. **累加长度并构建新字符串**:遍历原始字符串中的每个字符,根据其类型更新`newLength`,并将字符加入到`newStr`中。 4. **添加省略号**:如果`hasDot`参数为真且原始字符串长度大于指定长度,则在截取后的字符串...

    检查字符串是否为整数,C++程序

    - **性能优化**:当前的实现对于短字符串已经足够高效,但对于较长的字符串,可以考虑使用更高效的算法或数据结构来进一步提升性能。 - **国际化支持**:在某些情况下,数字可能会使用非ASCII字符表示(如阿拉伯数字...

    C/C++ 字符串转化成数字,支持任意进制

    - 对于效率,可能需要考虑优化算法,比如预计算进制幂表,避免重复计算,或者使用更高效的字符串处理方法。 7. **内存管理与安全性**: - 确保在处理字符串时避免内存泄漏,使用智能指针或其他内存管理策略。 - ...

    字符串数组转换成string类型的

    在处理大量数据时,可能需要考虑内存效率和性能优化,例如使用`StringBuilder`而非多次使用`+`操作符(在某些语言中,这会导致不必要的字符串拷贝)。 此外,对于跨语言交互或底层系统编程,可能还会涉及到字符编码...

    字符串的哈希Key算法

    其中,DJB2算法以其简单性和良好的散列性能被广泛使用,其基本思想是将字符串的每个字符的ASCII码累加,并用一个大的素数与之相乘,再对某个大数取模。 内存监控类则通常用于程序运行过程中监控内存的使用情况,...

    Rust的 sift4 字符串距离算法_rust_代码_下载

    这些计数会被累加,以估计最终的字符串距离。 4. **错误校正**:由于sift4是一个近似算法,可能不会总是精确地匹配Levenshtein距离。因此,可能会有一个校正步骤,以确保结果在可接受的误差范围内。 5. **性能优化...

    你必须知道的JavaScript 中字符串连接的性能的一些问题

    在不使用任何性能优化措施的情况下,简单的字符串连接操作(如使用加号" +")在执行时会涉及到以下步骤: 1. 创建一个临时字符串用于存储第一个字符串。 2. 创建一个临时字符串用于存储第二个字符串。 3. 创建一个...

    第8章 指针-5向函数传递字符串.pdf

    然而,对于简单的字符串长度计算,这些优化可能带来的性能提升并不显著,因为现代编译器往往能自动进行类似的优化。 总的来说,向函数传递字符串是C语言中常见的操作,通过指针传递可以有效地避免复制整个字符串的...

    c++将二进制字符串转换成十进制数

    在C++编程中,将二进制字符串转换为十进制数是一...此外,如果需要处理大量数据,可能要考虑性能优化,例如使用位运算而不是幂运算。通过理解和应用这些知识点,你可以在C++中有效地进行二进制字符串到十进制数的转换。

    zifuchuan.zip_字符串

    在IT领域,字符串是编程语言中非常基础且重要的数据类型,用于存储和处理文本信息。...通过理解和应用这些字符串长度相关的概念,我们可以更有效地编写代码,优化性能,并确保我们的程序能够正确处理各种输入数据。

    字符串频率检索

    函数内部会遍历文件的每一行,使用`str.count()`方法计算目标字符串在每一行中出现的次数,然后累加到总次数上。考虑到多行的情况,我们还需要考虑字符串跨越行尾的情况,可能需要使用`str.find()`或正则表达式进行...

    关于php几种字符串连接的效率比较(详解)

    第二种方法是使用`.=`操作符,它与`.`相同,但更适用于累加字符串。这种情况下,PHP不会每次都创建新字符串,而是尝试在原字符串基础上扩展,因此效率比直接使用`.`略高。测试结果显示,使用`.=`的执行时间明显减少...

    8个简单的汇编程序,数组排序、计算最大数,字符串比较,打印图形

    汇编语言是一种底层编程语言,直接对应计算机硬件的指令系统,因此对于理解计算机工作原理和优化程序性能具有重要意义。这里我们通过8个简单的汇编程序来探讨几个关键知识点: 1. **计算序列和**:这个程序用于计算...

    delphi字符串汉字统计小例子

    在Delphi编程环境中,字符串处理是一项基础且重要的任务。在这个"delphi字符串汉字统计小例子"中,我们探讨的核心知识点是如何在Delphi程序中统计一个字符串中汉字的数量,这对于短信软件开发或者其他涉及到文本处理...

    16进制累加器-小杉杉作品

    4. 性能优化:对于大量数据的累加,可能采用了高效的算法,比如避免不必要的内存分配,使用位运算等提高计算速度。 综上所述,"16进制累加器-小杉杉作品"是一款基于C#开发的Windows桌面应用,专注于快速、便捷地...

    ASP.NET从字符串中查找字符出现次数的具体实现方法

    但如果字符串极长或者对性能有严格要求,建议进行进一步的优化或寻找其他更高效的算法。 此外,文件中还提到了性能测试和对不同算法的比较。性能测试通常使用Stopwatch类来实现精确计时,而算法比较除了直接对比...

    VB将16进制字符串转为10进制校验和代码.rar

    在VB(Visual Basic)编程中,16进制与10进制的转换以及校验和的计算是常见的数据处理任务。...此外,如果你处理的数据量较大,可能需要考虑性能优化,例如使用`StringBuilder`类而不是`String`进行拼接操作。

Global site tag (gtag.js) - Google Analytics