java中可以对javabean进行判断重复的。
像list中有contain方法。
HashSet是没有重复的列表
但是对于普通的javabean如果能做到判断是相同的呢。这就涉及到javabean的hashcode和equals方法。
这两个方法是从Object继承而来的。
例如:如果想要判断一个javabean中的某几个属性相同则属于重复javabean。这是可以重写hashcode方法和equals方法。
如:
public class TestMain18 {
private String mmsi;
private String lon;
private String lat;
private java.util.Date updateTime;
。。。set和get方法。。。
//接下来重写hashcode方法和equals方法。
@Override
public int hashCode() {
// TODO Auto-generated method stub
return mmsi.hashCode()+lat.hashCode()+lon.hashCode()+updateTime.hashCode();
}
@Override
public boolean equals(Object obj) {
try {
if(obj == null) {
return false;
}
else{
if(obj instanceof TestMain18) {
TestMain18 t = (TestMain18)obj;
if(t.mmsi.equals(this.mmsi) && t.lat.equals(this.lat)&& t.lon.equals(this.lon)&&t.updateTime.equals(this.updateTime)) {
return true;
}
}
}
return false;
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
public static void main(String[] args) {
Date date=new Date();
TestMain18 t1=new TestMain18();
t1.setLat("121");
t1.setLon("30");
t1.setMmsi("11");
t1.setUpdateTime(date);
TestMain18 t2=new TestMain18();
t2.setLat("121");
t2.setLon("30");
t2.setMmsi("11");
t2.setUpdateTime(date);
//用HashSet
HashSet<TestMain18> hashSet = new HashSet<TestMain18>();
hashSet.add(t1);
hashSet.add(t2);
System.out.println(hashSet);
System.out.println();
for(TestMain18 t:hashSet){
System.out.println(t);
}
//用List
List<TestMain18> lists = new ArrayList<TestMain18>();
if(!lists.contains(t1)){
lists.add(0, t1);
}
if(!lists.contains(t2)){//重写equals
lists.add(0, t2);
}
System.out.println("长度:"+lists.size());
}
}
通过执行main函数,可以看到HashSet中只有一条记录。说明t1和t2是重复数据。
系统是如何判断的呢:
用HashSet时:
首先当添加add时,会判断javabean的hashCode是否一样,如果一样再去判断equals方法是否一样,
如果都一样,则系统认为这两个javabean是重复的。不添加到HashSet中。
用List时,
list中有contain方法。当用contain方法时,会去掉用javabean的equals方法。如果该javabean的equals方法和list中其余的javabean一样,
则系统认为是重复数据,list的contain方法会返回true,表示已存在。
说明:如果想要判断javabean是否相同。需要重写hashCode和equals方法。
示例如上。注意两点:
第一点:重写javabean的hashCode和equals方法。具体如何重写见上面示例。
第二点:用list的contain方法或者用HashSet的add方法。都可以达到过滤重复的javabean。
像list中有contain方法。
HashSet是没有重复的列表
但是对于普通的javabean如果能做到判断是相同的呢。这就涉及到javabean的hashcode和equals方法。
这两个方法是从Object继承而来的。
例如:如果想要判断一个javabean中的某几个属性相同则属于重复javabean。这是可以重写hashcode方法和equals方法。
如:
public class TestMain18 {
private String mmsi;
private String lon;
private String lat;
private java.util.Date updateTime;
。。。set和get方法。。。
//接下来重写hashcode方法和equals方法。
@Override
public int hashCode() {
// TODO Auto-generated method stub
return mmsi.hashCode()+lat.hashCode()+lon.hashCode()+updateTime.hashCode();
}
@Override
public boolean equals(Object obj) {
try {
if(obj == null) {
return false;
}
else{
if(obj instanceof TestMain18) {
TestMain18 t = (TestMain18)obj;
if(t.mmsi.equals(this.mmsi) && t.lat.equals(this.lat)&& t.lon.equals(this.lon)&&t.updateTime.equals(this.updateTime)) {
return true;
}
}
}
return false;
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
public static void main(String[] args) {
Date date=new Date();
TestMain18 t1=new TestMain18();
t1.setLat("121");
t1.setLon("30");
t1.setMmsi("11");
t1.setUpdateTime(date);
TestMain18 t2=new TestMain18();
t2.setLat("121");
t2.setLon("30");
t2.setMmsi("11");
t2.setUpdateTime(date);
//用HashSet
HashSet<TestMain18> hashSet = new HashSet<TestMain18>();
hashSet.add(t1);
hashSet.add(t2);
System.out.println(hashSet);
System.out.println();
for(TestMain18 t:hashSet){
System.out.println(t);
}
//用List
List<TestMain18> lists = new ArrayList<TestMain18>();
if(!lists.contains(t1)){
lists.add(0, t1);
}
if(!lists.contains(t2)){//重写equals
lists.add(0, t2);
}
System.out.println("长度:"+lists.size());
}
}
通过执行main函数,可以看到HashSet中只有一条记录。说明t1和t2是重复数据。
系统是如何判断的呢:
用HashSet时:
首先当添加add时,会判断javabean的hashCode是否一样,如果一样再去判断equals方法是否一样,
如果都一样,则系统认为这两个javabean是重复的。不添加到HashSet中。
用List时,
list中有contain方法。当用contain方法时,会去掉用javabean的equals方法。如果该javabean的equals方法和list中其余的javabean一样,
则系统认为是重复数据,list的contain方法会返回true,表示已存在。
说明:如果想要判断javabean是否相同。需要重写hashCode和equals方法。
示例如上。注意两点:
第一点:重写javabean的hashCode和equals方法。具体如何重写见上面示例。
第二点:用list的contain方法或者用HashSet的add方法。都可以达到过滤重复的javabean。