String.toCharArray() 的运行时间是多少?

Posted

技术标签:

【中文标题】String.toCharArray() 的运行时间是多少?【英文标题】:What is the run time of String.toCharArray()? 【发布时间】:2012-12-27 23:55:27 【问题描述】:

String.toCharArray() 在 java 中的运行时间是多少?源代码是

 public char[] toCharArray() 
    // Cannot use Arrays.copyOf because of class initialization order issues
    char result[] = new char[value.length];
    System.arraycopy(value, 0, result, 0, value.length);
    return result;

System.arrayCopy 是吗?运行时间为 O(n)?源代码并没有真正说明它是如何实现的。它是否遍历每个元素并复制它?谢谢。

【问题讨论】:

我很确定运行时间是 O(n) 再好不过了(必须复制字符)。问题是什么因素。 看到这个答案:***.com/a/11208577/485971 @irrelephant 所以可能是 O(1)?因为它不是遍历循环而是复制内存块? 不是真的 - 我认为它仍然是 O(N) 但常数因子较低,正如@MrSmith42 所说。有时它可能具有更高的常数因子 - 请参阅 ***.com/a/2589962/485971 @cinnamontoast:即使该方法是复制blocks的内存,也不能是O(1)。我想说,运行时仍然是O(N),其中N 是块数。尽管这是一种更快的方法,但您仍然需要复制所有块。 【参考方案1】:

System.arraycopy() 通常是一个内在函数并且非常快。也就是说,它仍然需要查看(并复制)数组的每个元素,因此它的渐近复杂度在数组长度上是线性的,即O(n)

因此toCharArray() 的复杂度是O(n),其中n 是字符串的长度。

【讨论】:

以上是关于String.toCharArray() 的运行时间是多少?的主要内容,如果未能解决你的问题,请参考以下文章

java string toCharArray

JavaSE8基础 String toCharArray 字符串转换成字符数组

String对象的一些函数用法与心得

如何将 String 转换为 char 数组?

JAVA中怎么把字符串转换成字符数组

JAVA中怎么把字符串转换成字符数组