色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

js深拷貝和java

孫明賢1年前7瀏覽0評論

在JavaScript和Java中,深拷貝是兩個非常常用的概念。深拷貝是指創建一個新對象并將源對象的所有屬性復制到新對象中,包括嵌套對象和數組。深拷貝很有用,因為它可以創建獨立的對象,它們可以修改而不影響源對象。下面將介紹如何在JavaScript和Java中實現深拷貝。

在JavaScript中,深拷貝可以通過遞歸復制嵌套屬性來實現。以下是一個示例代碼:

function deepCopy(obj) {
let newObj = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
newObj[key] = deepCopy(obj[key]);
} else {
newObj[key] = obj[key];
}
}
return newObj;
}
let obj = {a: 1, b: {c: 2}};
let copy = deepCopy(obj);

以上代碼實現了一個名為deepCopy的函數,該函數接受一個對象作為參數,并返回一個深度副本。如果一個鍵的值是對象或數組,則遞歸調用函數以進行深度復制。否則,直接復制該鍵值。應該注意的是,此代碼不處理循環引用,這可能會導致無限遞歸。

在Java中,可以使用序列化/反序列化來實現對象的深拷貝。以下是一個示例代碼:

public static <T extends Serializable> T deepCopy(T obj) throws IOException, ClassNotFoundException {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream objectOut = new ObjectOutputStream(byteOut);
objectOut.writeObject(obj);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream objectIn = new ObjectInputStream(byteIn);
return (T) objectIn.readObject();
}
class MyClass implements Serializable {
int a;
int[] b;
MyClass(int a, int[] b) {
this.a = a;
this.b = b;
}
}
MyClass obj = new MyClass(1, new int[]{2, 3});
MyClass copy = deepCopy(obj);

以上代碼實現了一個名為deepCopy的泛型函數,該函數接受任何可序列化的對象作為參數,并返回一個深度副本。首先,將對象寫入字節數組輸出流中。然后,使用字節數組輸入流將該流反序列化為新對象。應該注意的是,源對象和其內部引用的對象都必須是序列化的。