为什么';java文档的渐近复杂性,如C++;做
我注意到Java库的标准文档(即ArrayList.[add,remove,…]不要包括方法的复杂度,就像它们的C++等价物。这似乎会大大阻碍使用标准库开发java中的高效程序……或者我遗漏了什么?< p>在方法本身中没有记录java集合方法的运行时间,因为它们不属于特定的COLL。在类中,它们属于接口,如为什么';java文档的渐近复杂性,如C++;做,java,c++,Java,C++,我注意到Java库的标准文档(即ArrayList.[add,remove,…]不要包括方法的复杂度,就像它们的C++等价物。这似乎会大大阻碍使用标准库开发java中的高效程序……或者我遗漏了什么?< p>在方法本身中没有记录java集合方法的运行时间,因为它们不属于特定的COLL。在类中,它们属于接口,如集合接口或映射接口,它们与实现无关 因此,如果实现接口的类是链表,则remove()方法可能有一个O(1),如果实现接口的类是数组列表,则可能有一个O(n);因此,接口无法保证方法的性能 但是
集合
接口或映射
接口,它们与实现无关
因此,如果实现接口的类是链表,则remove()
方法可能有一个O(1)
,如果实现接口的类是数组列表,则可能有一个O(n)
;因此,接口无法保证方法的性能
但是,如果您查看java的具体集合类本身的文档(例如,ArrayList
),您总会发现一些注释,解释类在渐进复杂性方面的一般行为这是不必要的,并且b)在绝大多数情况下,java代码访问接口,而不是具体的类,因此您可以看到的关于集合方法的唯一文档类型是接口而不是类提供的文档
<> P>如果你精确地告诉我们你在谈论的是C++等价物,这会有帮助,但是我怀疑你是在看具体的C++类,或者是模板,而不是接口。当一个方法是非虚的时,我们知道哪个类在实现它,所以我们可以记录它的渐进复杂性。当方法是虚拟的时,我们不能这样做。java收集方法的运行时间没有记录在方法本身中,因为它们不属于特定的收集类,它们属于接口,如
收集
接口或映射
接口,它们是实现不可知的
因此,如果实现接口的类是链表,则remove()
方法可能具有O(1)
,如果实现接口的类是数组列表,则O(n)
;因此,接口不能保证方法的性能
但是,如果您查看java的具体集合类本身的文档(例如,ArrayList
),您总会发现一些注释,解释类在渐进复杂性方面的一般行为。只是这些信息并没有在类的每个方法中重复,因为a)它是不必要的,b)在绝大多数情况下,java代码访问接口,而不是具体的类,因此您可以看到的关于集合方法的唯一类型的文档是接口提供的文档,课堂上没有
<> P>如果你精确地告诉我们你在谈论的是C++等价物,这会有帮助,但是我怀疑你是在看具体的C++类,或者是模板,而不是接口。当一个方法是非虚的时,我们知道哪个类在实现它,所以我们可以记录它的渐进复杂性。当方法是虚拟的时,我们不能做这样的事情。有些事情:。看起来Java确实提供了复杂性保证。但在C++中,它显然更明显,这可能与CultueTH有关。Javadoc充满了渐进复杂性保证。例如,整个集合包。有些东西:。看起来Java确实提供了复杂性保证。但在C++中,它显然更明显,这可能与CultueTH有关。Javadoc充满了渐进复杂性保证。例如,整个集合包。