1.利用CollectionUtils的mergeArrayIntoCollection和Collections.copy结合实现深拷贝
public class TechSysVo {
@Getter
@Setter
private Long id;
@Getter
@Setter
private String name;
public TechSysVo() {
}
}
import com.wsh.clone.arraylist.TechSysVo;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class App {
public static void main(String[] args) {
TechSysVo techSysVo = new TechSysVo();
TechSysVo techSysVo1 = new TechSysVo();
List<TechSysVo> list = new ArrayList<>();
list.add(techSysVo);
list.add(techSysVo1);
//list深度拷贝
List<TechSysVo> newList = new ArrayList<>();
CollectionUtils.mergeArrayIntoCollection(new Object[list.size()],newList);
Collections.copy(newList, list);
//拷贝完清空result
list.clear();
System.out.println(list.toString());
System.out.println(newList.toString());
}
}
输出结果:
2.使用序列化方法
public class TechSysVo implements Serializable {
@Getter
@Setter
private Long id;
@Getter
@Setter
private String name;
public TechSysVo() {
}
}
public static <T> List<T> deepCopy(List<T> src) {
try {
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);
out.writeObject(src);
ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
@SuppressWarnings("unchecked")
List<T> dest = (List<T>) in.readObject();
return dest;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
TechSysVo techSysVo = new TechSysVo();
TechSysVo techSysVo1 = new TechSysVo();
List<TechSysVo> list = new ArrayList<>();
list.add(techSysVo);
list.add(techSysVo1);
//list深度拷贝
List<TechSysVo> newList = new ArrayList<>();
newList = deepCopy(list);
//拷贝完清空result
list.clear();
System.out.println(list.toString());
System.out.println(newList.toString());
}
3.使用Java8的新特性的Stream实现深拷贝
public static void main(String[] args) {
TechSysVo techSysVo = new TechSysVo();
TechSysVo techSysVo1 = new TechSysVo();
List<TechSysVo> list = new ArrayList<>();
list.add(techSysVo);
list.add(techSysVo1);
//list深度拷贝
List<TechSysVo> newList = list.stream().collect(Collectors.toList());
//拷贝完清空result
list.clear();
System.out.println(list.toString());
System.out.println(newList.toString());
}