在Java中为String添加前缀?

问题描述:

我知道在一个字符串中添加一个字符应该花费O(1)次。例如: -在Java中为String添加前缀?

String S = "abc" 
S = S+'z'; 

如果我想要做反之亦然,将字符串连接成char。这是可能的吗?

S = 'z'+S; 

如果是,那么需要多少时间? Java是否复制String S {O(n)}的整个内容,或者只是调整内存中的指针{O(1)}?

谢谢!

+0

查看Java用于字符串连接的'StringBuilder'的实现。 –

+2

您是否确定*将字符添加到字符串应该花费O(1)次?请记住,字符串是不可变的... – awksp

+0

哎呀!实际上并不确定! –

concat的顺序无关紧要。在最近版本的编译器中,这个(通常)变成使用StringBuilder的字节码。

+0

“StringBuilder”的效率如何? –

+0

我没关系意味着这两项操作都会有相同的复杂性?哪个是O(n)或O(1)? –

+0

您几乎可以将它看作仅由char []而不是Object []支持的ArrayList。根据您所做的操作类型,这将非常快速高效。如果开头的尺寸不合适,或者插入的字符不是最后的字符,则价格会更高。 –

字符串是不可变的。因此,这种操作(添加前缀)无法成为O(1)。它至少与S的大小成线性关系。并且...因为它没有意义(考虑它)是O(f(N)),其中O(f(N))> O(N),这意味着它是O(N)。从常识来看,这很有把握。