关于list中bean复制问题(急) 现在又2个list,里面都保存相同的bena对象,如何把一个list里的对象复制到另外一个list里,并且list中完全相同的对象不会复制,也就是说只复制不同的对象,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最好在数据存放进第一个list就用equal判断是否重复,否则好像不太好搞 定义一个空的Set,把两个list中的元素依次往这个set中存放,就可以了。那么Set中的元素就是不重复的 定义一个空的Set,把两个list中的元素依次往这个set中存放,就可以了。那么Set中的元素就是不重复的 把第一个list赋给另外一个list,然后第一个的list和那个的list比较,把不相同的放到第二个list中呵呵,有点儿复杂,我也不怎么会用,还没有处理过你这样的问题 借助set来实现,首先把目标list的元素都放到set里面,然后再for循环源list,查一下set里面是不是有了,没有就添加到set同时添加到目标list 借助set来实现,首先把目标list的元素都放到set里面,然后再for循环源list,查一下set里面是不是有了,没有就添加到set同时添加到目标list 支持二楼,用set就没有重复的。 也可以用程序自己来判断,如果已经在list里包含该对象,则不要 add 用set来实现,直接往里面加就可以了,不用考虑重复的问题。 给个例子参考一下/*javabean对象*/import java.io.Serializable;public class TUser implements Serializable{ private String name; private Integer age; public TUser(){} public TUser(String name,Integer age){ this.name=name; this.age=age; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int hashCode() { final int PRIME = 31; int result = 1; result = PRIME * result + ((age == null) ? 0 : age.hashCode()); result = PRIME * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final TUser other = (TUser) obj; if (age == null) { if (other.age != null) return false; } else if (!age.equals(other.age)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } /*测试*/import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;import model.TUser;public class User2Test { public static void main(String[] args) { User2Test t=new User2Test(); t.test(); } @SuppressWarnings("unchecked") public void test(){ List list=new ArrayList(); list.add(new TUser("John",20)); list.add(new TUser("Erica",22)); list.add(new TUser("John",20)); list.add(new TUser("Mark",20)); list.add(new TUser("Smith",20)); list.add(new TUser("Erica",22)); list.add(new TUser("Lucy",22)); //显示list下的所有数据 show(list.iterator()); System.out.println("================"); Set set=new HashSet(); set.addAll(list);//将集合添加到set //显示set下的所有数据 show(set.iterator()); System.out.println("================"); List list2=new ArrayList(); list2.addAll(set); show(list2.iterator());//显示list2下的所有数据 } //显示数据 public void show(Iterator it){ while(it.hasNext()){ TUser user=(TUser)it.next(); System.out.println(user.getName()+" "+user.getAge()); } } }说明:javabean对象必须重写hashcode,equals方法,因为判断两个javabean对象相同,我们只要它的内容相同就可以了,而不是指向相同的地址。如果去掉javabean中的hashcode和equals方法,将不会过滤调内容相同的对象,只有指向相同的地址才会过滤调。 反正都是要两个LIST里的合集,都从LIST1里复制到LIST2里,LIST2不就是你想要的了吗,只不过可能效率差了点。。 干嘛有开源的不用??import org.apache.commons.beanutils.BeanUtils;BeanUtils.populate(对象1, 对象2);要求1、2是同一个对象的不同实现,可以把对象2中的值copy到1中对应的值如果不理解 可以测试一下 1.用set2.如果你的bean有对应的key话,也就是说有唯一识别值,那效率低点的做法是循环比较了3.19楼提到的开源的我到没有用过 JAVA问题求助 出一道面试题:哪一个是false? 有关软件加密的问题 java里环境变量怎么设置 迷茫之中,各位大哥前辈求求。。。 请教一个错误:Exception in thread "main" java.lang.NoClassDefFoundError: ec/Evolve 有谁要jbuilder8的注册机? 我做的第一个java程序(只有一句话),帮忙 请问这是什么错误啊,救救我!我已经急疯了!谢谢! 关于汇编显示乱码的问题 Double 引用传递问题? 关于读取文件权限奇怪问题?????????????
呵呵,有点儿复杂,我也不怎么会用,还没有处理过你这样的问题
private String name;
private Integer age;
public TUser(){}
public TUser(String name,Integer age){
this.name=name;
this.age=age;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((age == null) ? 0 : age.hashCode());
result = PRIME * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final TUser other = (TUser) obj;
if (age == null) {
if (other.age != null)
return false;
} else if (!age.equals(other.age))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
/*测试*/
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;import model.TUser;
public class User2Test {
public static void main(String[] args) {
User2Test t=new User2Test();
t.test();
}
@SuppressWarnings("unchecked")
public void test(){
List list=new ArrayList();
list.add(new TUser("John",20));
list.add(new TUser("Erica",22));
list.add(new TUser("John",20));
list.add(new TUser("Mark",20));
list.add(new TUser("Smith",20));
list.add(new TUser("Erica",22));
list.add(new TUser("Lucy",22));
//显示list下的所有数据
show(list.iterator());
System.out.println("================");
Set set=new HashSet();
set.addAll(list);//将集合添加到set
//显示set下的所有数据
show(set.iterator());
System.out.println("================");
List list2=new ArrayList();
list2.addAll(set);
show(list2.iterator());//显示list2下的所有数据
}
//显示数据
public void show(Iterator it){
while(it.hasNext()){
TUser user=(TUser)it.next();
System.out.println(user.getName()+" "+user.getAge());
}
}
}说明:javabean对象必须重写hashcode,equals方法,因为判断两个javabean对象相同,我们只要它的内容相同就可以了,而不是指向相同的地址。
如果去掉javabean中的hashcode和equals方法,将不会过滤调内容相同的对象,只有指向相同的地址才会过滤调。
干嘛有开源的不用??import org.apache.commons.beanutils.BeanUtils;BeanUtils.populate(对象1, 对象2);
要求1、2是同一个对象的不同实现,可以把对象2中的值copy到1中对应的值如果不理解 可以测试一下
2.如果你的bean有对应的key话,也就是说有唯一识别值,那效率低点的做法是循环比较了
3.19楼提到的开源的我到没有用过