java大字符串_坏的使用非常大的字符串? (JAVA)

本文通过基准测试展示了在处理大量文本时,使用StringBuilder相对于直接连接字符串的巨大性能优势。在构建长度为120000的字符串时,使用StringBuilder仅需7毫秒,而直接连接字符串则耗时21763毫秒。这强调了在处理字符串操作时,尤其是在循环中,应优先考虑使用StringBuilder以避免内存效率问题。
摘要由CSDN通过智能技术生成

流媒体vs不

当您可以流式传输时,您可以处理任何大小的文件(假设您真的可以忘记所有已经看到的数据).你最终会有一个自然的O(n)复杂性,这是一件非常好的事情.你不会因为内存不足而中断.

流式可爱…但在每种情况下都不起作用.

StringBuilder的

似乎对StringBuilder建议有一定的争议,这里是显示效果的基准.我不得不减小基准的大小,以便在合理的时间内慢速版本甚至完成.

结果先,然后代码.这是一个非常粗糙和准备的基准,但结果足够戏剧性,使得点…

c:\Users\Jon\Test>java Test slow

Building a string of length 120000 without StringBuilder took 21763ms

c:\Users\Jon\Test>java Test fast

Building a string of length 120000 with StringBuilder took 7ms

和代码…

class FakeScanner

{

private int linesLeft;

private final String line;

public FakeScanner(String line,int count)

{

linesLeft = count;

this.line = line;

}

public boolean hasNext()

{

return linesLeft > 0;

}

public String next()

{

linesLeft--;

return line;

}

}

public class Test

{

public static void main(String[] args)

{

FakeScanner scanner = new FakeScanner("test",30000);

boolean useStringBuilder = "fast".equals(args[0]);

// Accurate enough for this test

long start = System.currentTimeMillis();

String someString;

if (useStringBuilder)

{

StringBuilder builder = new StringBuilder();

while (scanner.hasNext())

{

builder.append(scanner.next());

}

someString = builder.toString();

}

else

{

someString = "";

while (scanner.hasNext())

{

someString += scanner.next();

}

}

long end = System.currentTimeMillis();

System.out.println("Building a string of length "

+ someString.length()

+ (useStringBuilder ? " with" : " without")

+ " StringBuilder took " + (end - start) + "ms");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值