日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何巧妙的使用ArrayList的Clone方法

發布時間:2024/4/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何巧妙的使用ArrayList的Clone方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、ArrayList的Clone方法的源碼

  • 返回一個Object對象,所以在使用此方法的時候要強制轉換
  • ArrayList的本質是維護了一個Object的數組,所以克隆也是通過數組的復制實現的,屬于淺復制
public Object clone() {try {@SuppressWarnings("unchecked")ArrayList<E> v = (ArrayList<E>) super.clone();v.elementData = Arrays.copyOf(elementData, size);v.modCount = 0;return v;} catch (CloneNotSupportedException e) {// this shouldn't happen, since we are Cloneablethrow new InternalError();}}

二、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方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。