網頁

2019/4/17

Java 複製ArrayList

Java 複製ArrayList物件到新的ArrayList物件。

List<Integer> aList = Arrays.asList(1,2,3);

List<Integer> bList = new ArrayList<>(aList); // copy all elements in aList to bList.

System.out.println(aList == bList); // false, aList and bList are different object.

System.out.println(aList.equals(bList)); // true, the elements in aList and bList are equal.

但這邊有個常犯的陷阱(曾花了我一小時找錯誤),如果List中的元素為可變的物件(mutable object),例如常用的POJO,則用以上方法複製出的新List裡面的元素仍指向原本的參照,會導致當修改新複製的List中的元素內容時,原List中的值也被修改了。因此在複製List中的元素為可變物件時,裡面的元素也必須複製(clone)。

而Java的原始型別(primitive type)的包裹類(wrapper class)都是不可變的類別(immutable class),因此沒有上述問題。


參考:

沒有留言:

張貼留言