將ArrayList中的元素深copy到另一個ArrayList中
阿新 • • 發佈:2019-01-07
學習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); } }