1. 程式人生 > >java 集合的深度克隆

java 集合的深度克隆

想象一下,有兩個list,list和list2(集合中盛的是物件,這裡不討論基礎資料型別),想把list1中的資料完全複製到list2中,但是需要同時滿足list1中的資料改變不會引起list2變化,如果通過直接addall,或者是遍歷進行add,兩者中的資料地址還是一樣的;當然也可以遍歷,然後每一次都new一個新的物件,但是太麻煩;

有感於android中的yuv影象轉換為bitmap,我們可以把list1中的資料轉換成二進位制資料流寫入到outputstream中,然後再寫入到inputstream中,然後readObject中,進行型別轉換為list型別

@SuppressWarnings("unchecked")
public static <T> List<T> deepCopyList(List<T> src)
{
    List<T> dest = null;
    try
    {
        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
        ObjectOutputStream out = new ObjectOutputStream(byteOut);
        out.writeObject(src);
        ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
        ObjectInputStream in = new ObjectInputStream(byteIn);
        dest = (List<T>) in.readObject();
    }
    catch (IOException e)
    {

    }
    catch (ClassNotFoundException e)
    {

    }
    return dest;
}