Class A
{
private Company comp;
private Sector sect;
//getters and setter//
}
class B extends A
{
//Some other properties//
@Override
public boolean equals(Object obj)
{
if (obj == null)
{
return false;
}
A other = (A)obj;
if(other.getSomething().equals(getSomething())
{
return true;
}
return false;
}
}
现在说我有List<B> b
并且A a
我想检查b.indexOf(a); 由于indexOf在内部使用equals方法,我已经重写了equals方法。
但它的返回1和0总是与其等于约束无关。
请提供解决方案
答案 0 :(得分:0)
ArrayList#indexOf(object)返回索引位置,如果未找到,则返回-1。
返回指定元素最后一次出现的索引 此列表,如果此列表不包含该元素,则返回-1。更多 正式地,返回最高指数i(o == null? get(i)== null:o.equals(get(i))),如果没有这样的索引,则为-1。
如果您想检查列表中是否存在给定对象,请使用ArrayList#contains()除了检查indexOf(o) >= 0;
答案 1 :(得分: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;
}
这是Arraylist中的实际方法,在阅读之后我知道我必须覆盖A类中的equal方法,因为我将A的实例作为参数传递。 最后它对我有用。
如果你看到上面的代码
if (o.equals(elementData[i]))
他们正在检查参数类的相等方法。
答案 2 :(得分:-1)
b.indexOf(a);
but its returning true always.
不可能。
返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。更正式地,返回最低索引i,使得(o == null?get(i)== null:o.equals(get(i))),如果没有这样的索引,则返回-1。