-4
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 总是与它的 equals 约束无关。

请提供解决方案

4

3 回答 3

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]))

他们正在检查参数类的 equal 方法。

于 2013-08-09T19:11:47.597 回答
0

ArrayList#indexOf(object ) 返回索引位置,如果未找到则返回 -1。

返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回 -1。更正式地说,返回满足 (o==null ? get(i)==null : o.equals(get(i))) 的最高索引 i,如果没有这样的索引,则返回 -1。

如果你想检查一个给定的对象是否存在于你的列表中,或者不使用ArrayList#contains()它什么都不做,只是检查indexOf(o) >= 0;

于 2013-08-09T12:52:13.607 回答
-1
b.indexOf(a);

but its returning true always.

不可能。

但根据 indexOf 的 API

返回此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回 -1。更正式地说,返回满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i,如果没有这样的索引,则返回 -1。

于 2013-08-09T12:50:15.353 回答