小弟刚进公司,公司内模板涉及到集合拷贝部分用了以下方法实现
public static Object clone(Object o1) {
if (o1 == null) {
return null;
}
Object o2;
try {
if (o1 instanceof Number) {
return o1;
}
if (o1 instanceof String) {
return o1;
} return BeanUtils.cloneBean(o1);
} catch (Exception e) {
throw new RuntimeException(e);
}
} public static void copyCollection(List srcList, List objList) {
try {
for (int i = 0; i < srcList.size(); i++) {
Object o = srcList.get(i);
objList.add(clone(o));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
这里我有点不解,如果但是集合拷贝,为何不用
public static void copyCollection(List srcList, List objList){
if(null!=srcList){
objList.addAll(srcList);
}
}
}
这样明显效率可以高不少
public static Object clone(Object o1) {
if (o1 == null) {
return null;
}
Object o2;
try {
if (o1 instanceof Number) {
return o1;
}
if (o1 instanceof String) {
return o1;
} return BeanUtils.cloneBean(o1);
} catch (Exception e) {
throw new RuntimeException(e);
}
} public static void copyCollection(List srcList, List objList) {
try {
for (int i = 0; i < srcList.size(); i++) {
Object o = srcList.get(i);
objList.add(clone(o));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
这里我有点不解,如果但是集合拷贝,为何不用
public static void copyCollection(List srcList, List objList){
if(null!=srcList){
objList.addAll(srcList);
}
}
}
这样明显效率可以高不少
import java.util.List;public class AddAllTest { public static void main(String[] args) {
List<Object> list = new ArrayList<Object>();
list.add("1");
list.add(null);
List<Object> list2 = new ArrayList<Object>();
list.add("2");
list2.add(null);
list.addAll(list2);
System.out.println(list);
list.remove(3);
System.out.println(list);
System.out.println(list2);
}
}
list.remove(3)后,list2也变了。这就是不clone的后果。
sorry,写错了一行。不是这个结果,我再看看!抱歉抱歉!!
import java.util.*;
class Person{
public String name;
public void setName(String name){
this.name=name;
}
public Person(String name){
this.name=name;
}
public String toString(){
return name;
}
}
public class ColTest{
public static void main(String args[]){
Person p1=new Person("hello");
Person p2=new Person("world");
List<Person> l1=new ArrayList<Person>();
l1.add(p1);l1.add(p2);
List<Person> l2=new ArrayList<Person>();
copyCollection(l1, l2);
System.out.println(l2);
l1.get(0).setName("p1");//这里修改了l1的内容,结果l2也跟着变了!!!!!!!
System.out.println(l2);
}
public static void copyCollection(List srcList, List objList){
if(null!=srcList){
objList.addAll(srcList);
}
}
}
import java.util.List;public class AddAllTest { public static void main(String[] args) {
List<MyClass> list = new ArrayList<MyClass>();
list.add(new MyClass(1));
list.add(new MyClass(2));
list.add(new MyClass(3));
List<MyClass> list2 = new ArrayList<MyClass>();
list2.add(new MyClass(4));
list2.add(new MyClass(5));
list2.add(new MyClass(6));
System.out.println(list);
System.out.println(list2);
list.addAll(list2);
System.out.println(list);
System.out.println(list2);
MyClass myClass = list.get(list.size()-1);
myClass.setI(999);
System.out.println(list);
System.out.println(list2);
}
}class MyClass {
int i; public MyClass(int i) {
this.i = i;
} public String toString() {
return i + "";
}
public void setI(int i){
this.i = i;
}
}
看看这个。