我正在编写一个程序,需要进行大量的字符串操作。我想提高性能,因此想知道是否使用字符数组会有很好的性能提升。有任何建议吗?
我正在编写的程序中涉及了大量的字符串操作。为了提高性能,我在考虑是否可以使用字符数组来代替字符串。您有什么建议吗?请注意,HTML标签应该被保留。我正在编写一个程序,需要进行大量的字符串操作。我想提高性能,因此想知道是否使用字符数组会有很好的性能提升。有任何建议吗?
我正在编写的程序中涉及了大量的字符串操作。为了提高性能,我在考虑是否可以使用字符数组来代替字符串。您有什么建议吗?请注意,HTML标签应该被保留。StringBuffer
。您可能会避免死锁和竞争条件,但结果可能与您预期的不符。 - Hank Gaysynchronized(thebuffer){...}
,但这种情况并不经常发生。实际上,这就是为什么引入了StringBuilder
的原因;当不需要时(即几乎所有时间),可以消除持有锁的成本。 - Donal Fellows public final class String implements java.io.Serializable,
Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** The offset is the first index of the storage that is used. */
private final int offset;
/** The count is the number of characters in the String. */
private final int count;
String a = "a";
a=a+"b";
a=a+"c";
编译时将自动转换为使用StringBuilder,可以借助javap轻松检查。
通常情况下,除非您是该领域的世界级专家,否则很少建议花时间尝试改进Java核心类的性能,因为这些代码最初是由世界级专家编写的。
字符串已经被实现为字符数组。你计划有什么不同的做法吗?无论如何,由于短暂对象的GC非常快速,我会很惊讶如果你能找到一种通过替换字符数组来提高性能的方法。
Michael Borgwardt关于使用小字符数组以及使用StringBuilder和StringBuffer的建议非常好。但对我而言,最重要的是尽量不要猜测哪些操作是慢的:进行测量、使用分析器,获取一些确凿的事实。因为通常我们对性能的猜测都是错误的。
当你有大量短字符串时,使用char[]
可以节省相当多的内存,这也意味着由于较少的缓存未命中而获得更快的速度。
但是对于大型字符串,主要要注意避免由于String
的不可变性导致的不必要复制。如果你经常进行连接或替换操作,使用StringBuilder
可以产生很大的差异。