List集合中的对象⽐较,取出不同对象
今天在做⾦碟系统与我们系统的对接的时候需要做⼀个客户同步
在同步时,需要⽐较对象,对查询出的数据库的数据进⾏⽐较
for(int i=0;i<list2.size();i++){
if(! (i))){
//把对应的对象加⼊到返回的结果集List中去就可以了
List l = new ArrayList();
l.add(list2);
System.out.String());
}
}
但是返回值总是false,在⽹上看到答案:需要在entity中重写equals⽅法:
ArrayList的contains⽅法
java
今天在⽤ArrayList类的caontains⽅法是遇到了问题,我写了⼀个存放Student类的ArrayList 但在调⽤ains(user)时总是返回false。去看了下ArrayList的源码,源码如下:
Java代码
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
字符串截取对象for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
[java] view plaincopy
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
发现在contains⽅法会调⽤ o.equals(elementData[i])⽅法,其中elementData[i]是个object类的实例。也就是说我在调⽤ains(user)时实际上⽐较的是user.equals(object) 这当然会返回false。
正确的⽅法,在Student类中改写equals⽅法。改写的代码如下:
Java代码
public boolean equals(Object obj) {
if (obj instanceof Student) {
Student u = (Student) obj;
return this.name.equals(u.name)
&& this.id.equals(id);
}
return super.equals(obj);
将需要对⽐的数据写到equals⽅法中,没写进去不⽐较,其他字段不同contains还是返回true,像这样:
Entity:
public class Student {
private Integer id;
private String name;
private Integer isBack;
// ......
public boolean equals(Object obj) {
if (obj instanceof Student) {
Student u = (Student) obj;
return this.name.equals(u.name)
&& this.id.equals(id);
}
return super.equals(obj);
}
}
public static void main(String[] args) {
List<Student> list1 = new ArrayList<Student>();
Student s = new Student();
s.setId(1);
s.setName("1");
list1.add(s);
List<Student> list2 = new ArrayList<Student>();
Student student2 = new Student();
student2.setId(1);
student2.setName("1");
student2.setIsBack(1);
list2.add(student2);
Student student3 = new Student();
student3.setId(1);
student3.setName("22");
student3.setIsBack(213123123);
list2.add(student3);
for(int i=0;i<list2.size();i++){
if(! (i))){
//把对应的对象加⼊到返回的结果集List中去就可以了
List l = new ArrayList();
l.add(list2);
System.out.String());
}
}
}
但是在重写equals⽅法的时候,如果⼀个值为null,就会报空指针异常,所以可以在重写equals⽅法的时候将equals改为 == public boolean equals(Object obj) {
if (obj instanceof Student) {
Student u = (Student) obj;
return this.name==(u.name)
&& this.id==(id);
}
return super.equals(obj);
}
执⾏效果:
public static void main(String[] args) {
List<Student> list1 = new ArrayList<Student>();
Student s = new Student();
s.setId(1);
s.setName("1");
list1.add(s);
List<Student> list2 = new ArrayList<Student>();
Student student2 = new Student();
student2.setId(1);
student2.setIsBack(1);
list2.add(student2);
Student student3 = new Student();
student3.setId(1);
student3.setName("111");
student3.setIsBack(213123123);
list2.add(student3);
for(int i=0;i<list2.size();i++){
if(! (i))){
//把对应的对象加⼊到返回的结果集List中去就可以了
List l = new ArrayList();
l.add(list2);
System.out.String());
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论