如何巧妙的使用ArrayList的Clone方法
生活随笔
收集整理的這篇文章主要介紹了
如何巧妙的使用ArrayList的Clone方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、ArrayList的Clone方法的源碼
- 返回一個Object對象,所以在使用此方法的時候要強制轉換。
- ArrayList的本質是維護了一個Object的數組,所以克隆也是通過數組的復制實現的,屬于淺復制。
二、ArrayList的Clone淺復制的巧妙使用
?當你需要使用remove方法移除掉集合中的對象,而非要修改集合中的對象的時候,可以選擇使用。
//添加兩個元素 Student stJack=new Student("Jack", 13); Student stTom=new Student("Tom", 15); list.add(stJack); list.add(stTom); //克隆 ArrayList<Student> listCopy=(ArrayList<Student>) list.clone(); //移除且不修改 listCopy.remove(1); System.out.println(list); System.out.println(listCopy);代碼解讀:
remove之前的:
?
remove之后的:
所以移除且不修改集合中的元素,只是在List內部的數組中移除了指向元素的地址,可以放心的使用clone。
三、實現List的深復制
如果你想要修改克隆后的集合,那么克隆前的也會被修改。那么就需要使用深復制。通過實現對象類的clone方法。
public class testClone {public static void main(String[] args) {ArrayList<Student> list=new ArrayList<Student>();//添加兩個元素Student stJack=new Student("Jack", 13);Student stTom=new Student("Tom", 15);list.add(stJack);list.add(stTom);//深克隆ArrayList<Student> listCopy=new ArrayList<Student>();for (Student student : list) {listCopy.add(student.clone());}//移除且不修改listCopy.get(0).setAge(20);System.out.println(list);System.out.println(listCopy);} }class Student{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Student(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}@Overrideprotected Student clone(){Student stuent = new Student(this.name,this.age); return stuent; }}?
轉載于:https://www.cnblogs.com/lyajs/p/5779021.html
總結
以上是生活随笔為你收集整理的如何巧妙的使用ArrayList的Clone方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu 16.04 搭建 pyth
- 下一篇: base64文件上传后台处理