在Java中,每个对象都有clone((方法。
在以下情况下,克隆方法的时间复杂度是多少:
- 默认实现,不覆盖clone((
- Ojbect包含n个字段
我只是猜测内置克隆方法是否使用了一些技术来将时间复杂性降低到O(1(。
基本克隆方法是浅副本。这意味着它克隆对象中的所有值和引用,而不是"克隆";"孩子";对象,例如数组和被引用对象。要做到这一点,您需要一个深度副本。
要创建深度副本,您必须覆盖clone方法并自己编写实现,或者利用一些使用反射递归遍历所有成员的克隆库。
浅克隆操作本质上是O(1)
。如果你想讨论O(n)
,那就是克隆一组对象。从大O的角度来看,计算字段是没有意义的,因为给定对象的字段数不会变化换句话说,给定对象的克隆总是需要相同的时间(恒定时间(来执行(或多或少(。
进一步阅读
Java 中的Clone((方法