1. 程式人生 > >將ArrayList中的元素深copy到另一個ArrayList中

將ArrayList中的元素深copy到另一個ArrayList中

學習ArrayList到另一個ArrayList的淺copy

淺copy就是返回元素一樣的ArrayList,但是元素本身並沒有copy,如果原來元素的內容改變了,兩個ArrayList內容都會隨著改變(兩部分公用元素)

深copy是指複製後兩部分完全沒有交集,各自有各自的元素。

package com.studyJava.stringStudy;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

/**
 * 線性表的copy
 * @author ywf
 *
 */
public class ArrayListCopy {

    /**
     * 線性表的淺層copy,拷貝內容,引用
     */
    public void copy1(ArrayList list){        
        ArrayList listnew = new ArrayList();
        listnew=(ArrayList) list.clone();
        System.out.println(list);        
        System.out.println("方法:copy1() "+"比較內容是否相等:"+listnew.equals(list));
        System.out.println("方法:copy1() "+"比較引用是否相等:"+(listnew==list));        
        System.out.println(list);
        System.out.println(listnew);
    }
    /**
     * 淺層copy方法2
     * @param list
     */
    public void copy2(ArrayList list){
        ArrayList listnew = new ArrayList();
        for(Object o :list){
            listnew.add(o);
        }
        System.out.println("方法:copy2() "+"比較內容是否相等:"+listnew.equals(list));
        System.out.println("方法:copy2() "+"比較引用是否相等:"+(listnew==list));        
        System.out.println(list);
        System.out.println(listnew);
    }
    /**
     * 淺層copy方法3
     * @param list
     */
    public void copy3(ArrayList list){
        ArrayList listnew = new ArrayList();
        listnew.addAll(list);
        System.out.println("方法:copy3() "+"比較內容是否相等:"+listnew.equals(list));
        System.out.println("方法:copy3() "+"比較引用是否相等:"+(listnew==list));        
        System.out.println(list);
        System.out.println(listnew);
    }
    /**
     * 淺層copy方法2
     */
    public void copy4(ArrayList list){        
        ArrayList listnew = new ArrayList(Arrays.asList(new Object[list.size()]));
        Collections.copy(listnew, list);
        System.out.println("方法:copy4() "+"比較內容是否相等:"+listnew.equals(list));
        System.out.println("方法:copy() "+"比較引用是否相等:"+(listnew==list));        
        System.out.println(list);
        System.out.println(listnew);
    }    
    public static void main(String[] args){
        ArrayListCopy test = new ArrayListCopy();
        ArrayList list = new ArrayList();
        int [] array ={1,2,3,45};
        for(int i=0;i<array.length;i++){
            list.add(array[i]);
        }        
        test.copy1(list);
        test.copy2(list);
        test.copy3(list);
        test.copy4(list);
        
    }
}