ArrayList中 contains比较内容,arraylistcontains
分享于 点击 14344 次 点评:105
ArrayList中 contains比较内容,arraylistcontains
博主java基础不好,今天用到ArrayList的contains的方法的时候,我发现尽管我的两个对象的实例内容相同(当然两个实例的ID号并不相同),但是contains也不能判true
public class TestClass{
int a;
int b;
public TestClass(int a, int b){
this.a = a;
this.b = b;
}
}
TestClass a = new TestClass(1, 1);
TestClass b = new TestClass(1, 1);
ArrayList <TestClass>list = new <TestClass>ArrayList();
list.add(a);
System.out.print(list.contains(b);
TestClass是自己定义的类
上面的代码显示的会是false;
为什么内容一样会是false,博主去看了一下contains的源码发现是这样写的:
调用了父类object的equals来比较于是我又去看了equals的源码
发下object中的equals中的源码是这样的
直接比较实例的ID号。
难怪会不一样。
在java中解决这个问题简直就是轻而易举,我们只要重写TestClass中的equals就啦。
TestClass{
int a;
int b;
public boolean equals(Object obj) {
if (obj instanceof TestClass) {
TestClass obj1 = (TestClass) obj;
return (this.a == obj1.a)&&(this.b == obj1.b);
}
return super.equals(obj);
}
}
这是一个例子,up写的没那么好,就按别人的思路重写了下。
相关文章
- 暂无相关文章
用户点评