一、List 複製的概念及實現方式
List 複製是指將一個 List 中的所有元素全部複製到另一個 List 中,並且這兩個 List 中的元素是相互獨立的。基本實現方式包括深拷貝和淺拷貝。
1. 深拷貝(deep copy):將源 List 中的所有元素全部複製到新的 List 中,同時新 List 中的所有元素都是源 List 中元素的副本。即修改源 List 中的元素不會影響新的 List 中的元素。
List sourceList = new ArrayList(); sourceList.add("a"); sourceList.add("b"); sourceList.add("c"); List newList = new ArrayList(sourceList); sourceList.set(0, "A"); System.out.println(sourceList); //[A, b, c] System.out.println(newList); //[a, b, c]
2. 淺拷貝(shallow copy):將源 List 中的所有元素全部複製到新的 List 中,新 List 中的元素只是源 List 中元素的引用。即修改源 List 中的元素會同步影響新的 List 中的元素。
List<List> sourceList = new ArrayList(); List innerList = new ArrayList(); innerList.add(1); innerList.add(2); sourceList.add(innerList); List<List> newList = new ArrayList(sourceList); sourceList.get(0).set(0, 3); System.out.println(sourceList); //[[3, 2]] System.out.println(newList); //[[3, 2]]
二、使用 Collections.copy() 進行深拷貝
Collections.copy() 方法可以用於 List 的深拷貝,使用該方法需要滿足以下兩個條件:
1. 目標 List 的大小要等於源 List 的大小。
2. 目標 List 中的元素要支持賦值操作
List sourceList = new ArrayList(); sourceList.add("a"); sourceList.add("b"); sourceList.add("c"); List newList = new ArrayList(sourceList.size()); Collections.copy(newList, sourceList); sourceList.set(0, "A"); System.out.println(sourceList); //[A, b, c] System.out.println(newList); //[a, b, c]
三、使用 clone() 進行深拷貝
Java 中的 clone() 方法可以用於對象的深拷貝,List 是對象的一種,因此也可以用於 List 的深拷貝。使用該方法需要將 List 轉換為數組進行 clone() 操作,再將數組轉換為 List。
List sourceList = new ArrayList(); sourceList.add("a"); sourceList.add("b"); sourceList.add("c"); List newList = Arrays.asList(sourceList.toArray(new String[0])).stream().collect(Collectors.toList()); sourceList.set(0, "A"); System.out.println(sourceList); //[A, b, c] System.out.println(newList); //[a, b, c]
四、小結
複製 List 是 Java 開發中常見的操作之一,它可以讓我們在不改變源 List 的情況下,通過新的 List 進行操作。在複製 List 時需要注意深拷貝與淺拷貝的區別,並選擇合適的方法進行操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/197392.html