Sau*_*s S 21 java list arraylist
假设我有这样的课程:
class A {
int elementA;
int elementB
}
Run Code Online (Sandbox Code Playgroud)
我也有ArrayList
这样的:ArrayList<A> listObj
.
如何仅使用某些属性来检查该列表是否包含对象A
?例如,只考虑elementA
查找对象newA{elementA}
是否已在列表中?
对于对象,A
我已经定义了一个equals
方法,我只考虑了这个方法elementA
,但这还不够.
NIN*_*OOP 25
List#contains()方法使用该equals()
方法来评估两个对象是否相同.因此,您需要equals()
在类中A
覆盖并覆盖hashCode()
.
@Override
public boolean equals(Object object)
{
boolean isEqual= false;
if (object != null && object instanceof A)
{
isEqual = (this.elementA == ((A) object).elementA);
}
return isEqual;
}
@Override
public int hashCode() {
return this.elementA;
}
Run Code Online (Sandbox Code Playgroud)
hashCode()
当涉及到这一点时,数组的 and有点equals()
被破坏(这是一个很长的不同讨论为什么)。
一个可能的解决方法是使用ArrayList 的 equals() 方法ArrayList<ArrayList<String>>
来代替ArrayList<String[]>
ArrayList 的 equals() 方法,这将如您所期望的那样。
例如:
ArrayList<String> l1 = new ArrayList<>();
ArrayList<String> l2 = new ArrayList<>();
l1.add("asdf");
l2.add("asdf");
ArrayList<ArrayList<String>> coll = new ArrayList<>();
coll.add(l1);
System.out.println(coll.contains(l2));
Run Code Online (Sandbox Code Playgroud)
将产生 true,如预期的那样
另请参阅下面的链接
Java 中查看 ArrayList 是否包含对象的最有效方法