【问题标题】:Adding a prefix to the String in Java?在Java中为字符串添加前缀?
【发布时间】:2014-06-11 21:11:15
【问题描述】:

我知道在字符串中添加一个字符需要 O(1) 时间。例如:-

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

如果我想反之亦然,将字符串连接成 char。可以这样吗?

S = 'z'+S;

如果是,那需要多长时间? Java 是复制 String S{O(n)} 的全部内容还是只是调整内存中的指针 {O(1)}?

谢谢!

【问题讨论】:

  • 看一下StringBuilder的实现,Java用于字符串连接。
  • 确定向字符串添加一个字符需要 O(1) 时间吗?请记住,字符串是不可变的...
  • 糟糕!实际上不确定!
  • 如果Java复制内存来创建一个新的字符串,它会非常快,不像复制或调整字符串中的字符:-/
  • 复制内存仍然是一个 O(n) 操作(至少在 Java 中。我不确定 C/C++/其他低级语言可以用 memcpy 做什么)。如果您必须复制大量长字符串,它可能会更慢。

标签: java string concatenation


【解决方案1】:

字符串是不可变的。因此,这个操作(添加前缀)不可能是 O(1)。它至少与 S 的大小呈线性关系。而且...因为 O(f(N)) 其中 O(f(N)) > O(N) 是没有意义的(想想看),这意味着它是O(N)。仅凭常识就可以确定这一点。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • StringBuilder 的效率如何?
    • 我没关系的意思是这两个操作会有同样的复杂度? O(n) 还是 O(1)?
    • 您几乎可以将其视为仅由 char[] 而不是 Object[] 支持的 ArrayList。根据您执行的操作类型,它会非常快速和高效。如果一开始的大小不合适,或者您在末尾插入了其他字符,则成本会更高。
    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多