-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 メソッドをオーバーライドしました。

ただし、equals 制約に関係なく、常に 1 と 0 を返します。

親切に解決策を提供してください

4

3 に答える 3

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 に答える
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 のインスタンスをパラメーターとして渡しているため、クラス A の equal メソッドをオーバーライドする必要があることがわかりました。最後にそれは私のために働いた。

上記のコードが表示された場合

 if (o.equals(elementData[i]))

パラメータクラスの equal メソッドをチェックしています。

于 2013-08-09T19:11:47.597 に答える
-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 に答える