一、前言:
ArrayList是我们经常会用到的集合类,有时候我们为了要不改变原来的数据需要重新拷贝一个新的ArrayList,今天在使用ArrayList拷贝时遇到了一些问题,这里整理并记录一下。
二、准备:
首先: ArrayList的常见的拷贝方法有很多,其中都是浅拷贝,这里介绍几种浅拷贝的方式:
1、通过构造函数方法拷贝:
List<Integer> newList = new ArrayList<>(list);
2、addAll()方法
List<Integer> newList = new ArrayList<>();
newList.addAll(list);
3、Collections.copy方法
List<Integer> newList = new ArrayList<>();
newList.addAll(list);
Collections.copy(newList, list)
4、stream 方法
java 8 的新特性
List<Integer> newList = list.stream().collect(toList());
5、ArrayList clone() 方法
clone() 方法用于拷贝一份动态数组,属于浅拷贝,使用 ArrayList clone() 方法拷贝动态数组:
import java.util.ArrayList;
class Main {
public static void main(String[] args){
// 创建一个数组
ArrayList<String> sites = new ArrayList<>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
System.out.println("网站列表: " + sites);
// 对 sites 进行拷贝
ArrayList<String> cloneSites = (ArrayList<String>)sites.clone();
System.out.println("拷贝 ArrayList: " + cloneSites);
}
}
深拷贝
import java.util.ArrayList;
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的元素修改不影响list的元素
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;
}
}
标签:java,name,ArrayList,list,Student,拷贝,age
From: https://www.cnblogs.com/weidaijie/p/16722669.html