Java 中克隆方法的时间复杂度?
Time complexity of clone method in Java?
Java中的每个对象都有 clone() 方法。
克隆方法在以下条件下的时间复杂度是多少:
- 默认实现,不要覆盖 clone()。
- Ojbect 包含 n 个字段。
我只是猜测内置克隆方法是否使用某种技术将时间复杂度降低到 O(1)。
基本克隆方法是浅层复制。这意味着它会克隆对象中的所有值和引用,但不会克隆“子”对象,例如数组和引用对象。为此,您需要 deep 副本。
要创建一个 deep 副本,您必须覆盖克隆方法并自己编写一个实现,或者利用一些使用反射递归遍历所有成员的克隆库.
浅克隆操作本质上是O(1)
。如果你想谈论 O(n)
,那就是克隆对象集合。从 Big O 的角度来看,计算字段数没有意义,因为给定对象的字段数 不会变化。 换句话说,给定对象的克隆总是占用相同的数量执行(或多或少)的时间(恒定时间)。
进一步阅读
Clone() method in Java
Java中的每个对象都有 clone() 方法。
克隆方法在以下条件下的时间复杂度是多少:
- 默认实现,不要覆盖 clone()。
- Ojbect 包含 n 个字段。
我只是猜测内置克隆方法是否使用某种技术将时间复杂度降低到 O(1)。
基本克隆方法是浅层复制。这意味着它会克隆对象中的所有值和引用,但不会克隆“子”对象,例如数组和引用对象。为此,您需要 deep 副本。
要创建一个 deep 副本,您必须覆盖克隆方法并自己编写一个实现,或者利用一些使用反射递归遍历所有成员的克隆库.
浅克隆操作本质上是O(1)
。如果你想谈论 O(n)
,那就是克隆对象集合。从 Big O 的角度来看,计算字段数没有意义,因为给定对象的字段数 不会变化。 换句话说,给定对象的克隆总是占用相同的数量执行(或多或少)的时间(恒定时间)。
进一步阅读
Clone() method in Java