List的clone方法的应用
来源:互联网 发布:微课录屏软件有哪些 编辑:程序博客网 时间:2024/05/20 20:45
一、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 Cloneable throw 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; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } @Override protected Student clone(){ Student stuent = new Student(this.name,this.age); return stuent; } }
阅读全文
0 0
- List的clone方法的应用
- java 的clone方法
- javascript的clone方法
- js的clone方法
- Object的clone方法
- Java的clone方法
- java的clone方法
- clone方法的实现
- Object 的clone方法
- ArrayList的clone方法
- Java的Clone方法
- 数组的clone()方法
- Java的clone方法
- HashMap的clone方法
- Java的clone方法
- Object的clone方法
- Java的clone方法
- Java的clone方法
- 错排两大公式
- spring boot事物
- hdu 5442 Favorite Donut(最大表示法+kmp)
- 矩阵中的路径
- Android 使用iperf测试wifi吞吐量
- List的clone方法的应用
- Qt无边框窗口简单示例
- c语言操作mysql和数据库基本操作
- 推荐3个微信小程序地图接口Api
- 暑期集训总结
- 【Redis】windows环境下redis的安装与python的简单调用
- oracle分区表详解
- 计算机书籍推荐
- windows下开启文件共享的访问日志