深拷贝list

1.浅拷贝

            只传递了地址 :A = B,改变A会改变B的内容,因为他两个指向同一块内存区域,记住String是特例,还有final修饰的类

2.深拷贝

            我自己需要保存两次list,第一次保存的时候会改变其中元素的某些值,导致第二次保存的是第一次修改后的值,

然后我采用了序列化的方式拷贝这个list,不知道是否合适。下面贴出代码:

//深拷贝
List indexList = deepCopy(planInfo.getIndexList());



//方法:
@SuppressWarnings("unchecked")
	public  List deepCopy(List list){  
		List dest = null;
		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
		ObjectOutputStream out = null;
	    try {
			out = new ObjectOutputStream(byteOut);  
			out.writeObject(list);  
  
			ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());  
			ObjectInputStream in = new ObjectInputStream(byteIn);  
			dest = (List) in.readObject();  
		} catch (Exception e) {
			e.printStackTrace();
		}  finally {
			try {
				if (out != null) {
					out.close();
				}
				if (byteOut != null ) {
					byteOut.close();
				}
			} catch (IOException e) {
				out = null;
				byteOut = null;
				e.printStackTrace();
			}
		}
	    return dest;
	}  

 

注意:list中的泛型类一定是serializable的实现,并且类中最好指定成员:

private static final long serialVersionUID = -673557131125300251L;

 测试代码:

public static void test01() {
		List list = new ArrayList();
		List list1 = new ArrayList();
		list.add(new StringCloneTest01("as"));
		list.add(new StringCloneTest01("sasdsad"));
		list.add(new StringCloneTest01("15456"));
		list1.addAll(list);

		System.out.println(list.get(0) == list1.get(0));//true
		System.out.println(list1);
	}

 

你可能感兴趣的:(深拷贝list)