Java 深拷贝 List<Map<String,Object>>
时间: 2023-07-19 13:40:48 浏览: 109
要深拷贝一个List<Map<String,Object>>,可以使用Java的序列化和反序列化机制实现。具体步骤如下:
1. 创建一个ByteArrayOutputStream对象,用于保存序列化后的数据。
2. 创建一个ObjectOutputStream对象,并将其绑定到ByteArrayOutputStream对象上,用于序列化List<Map<String,Object>>对象。
3. 调用ObjectOutputStream的writeObject()方法将List<Map<String,Object>>对象序列化到ByteArrayOutputStream中。
4. 创建一个ByteArrayInputStream对象,并将其绑定到ByteArrayOutputStream的toByteArray()方法返回的字节数组上,用于反序列化。
5. 创建一个ObjectInputStream对象,并将其绑定到ByteArrayInputStream对象上,用于反序列化List<Map<String,Object>>对象。
6. 调用ObjectInputStream的readObject()方法反序列化List<Map<String,Object>>对象。
7. 最后关闭流。
示例代码如下:
```java
public static List<Map<String, Object>> deepCopy(List<Map<String, Object>> srcList) throws IOException, ClassNotFoundException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(srcList);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
List<Map<String, Object>> destList = (List<Map<String, Object>>) ois.readObject();
ois.close();
bais.close();
oos.close();
baos.close();
return destList;
}
```
注意:要深拷贝的List中的元素必须是可序列化的,否则会抛出java.io.NotSerializableException异常。
阅读全文