为什么Java不包含javadoc中每个函数的时间/空间复杂度?

时间:2012-04-10 15:36:03

标签: java string complexity-theory javadoc replaceall

您好我想知道String类的“replaceAll”函数的时间复杂度是什么,但我找不到任何相关信息。(http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

Java在Javadoc中包含复杂性会不会更好?我相信有人知道这是非常重要的事情。

5 个答案:

答案 0 :(得分:9)

大多数功能都具有相当直接的时间复杂性。 AFAIK,replaceAll是O(n)

IMHO。没有什么能够凭经验自行测试,例如使用分析器,因为您使用99%的方法很可能对应用程序的性能几乎没有影响。

答案 1 :(得分:3)

如果有保证,可以记录复杂性。例如,某些集合类记录了复杂性保证。例如,来自HashMap

  

此实现为基本操作(get和put)提供了恒定时间性能......

然而,有时复杂性是:

  • 不保证,并且可以随着实施的修改而自由更改。
  • 显然是O(1)。

答案 2 :(得分:1)

Java API的javadocs指定了每个方法必须完成 的一般合同,而不是如何。 API的每个实现者(比如OpenJDK,Oracle的JDK等)在如何实现每个合同方面都有一定的自由,这种自由可能包括进行优化,甚至牺牲性能。所以javadocs一般不会指定函数的时间/复杂性等细节,除非方法满足某些性能要求是绝对必要的。

答案 3 :(得分:0)

如果您正在使用基本操作的空间/时间复杂度来推动设计决策,那么您几乎肯定会做错了。

首先构建一个正确的应用程序,然后对其进行分析。然后优化分析过程显示的瓶颈。

答案 4 :(得分:0)

一般的答案是,复杂性通常取决于难以分析的因素。这当然适用于String.replaceAll,其中有效复杂性主要取决于regex字符串。 (一个设计不佳的正则表达式可能会让匹配的veriyy变慢。)