IndexOf不适用于childList

时间:2013-08-09 12:47:21

标签: java oop inheritance equals core

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总是与其等于约束无关。

请提供解决方案

3 个答案:

答案 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.

不可能。

但按照API of indexOf

  

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