0

皆さん、こんにちは!私は野球シーズンの記録を保持するためにこのプロジェクトに取り組んできましたが、ArrayList の使用法でこの問題に直面しました。

. . .

private ArrayList<Team> list1 = new ArrayList<Team>();

Team something = new Team("Somename");
Team somethingelse = new Team("Someothername");

次に、次のようないくつかのセッターを使用しました。

something.setPoints(1);
somethingelse.setPoints(2);

その後:

list1.add(something);
list1.add(somethingelse);

しかし、ここに問題があります:

int help1 = list1.indexOf(something);
System.out.println(help1);

-1 を返します

しかし、リストには次のオブジェクトが含まれています。

for (Team d: list1) {
      System.out.println(d);
 }

出力は、 toString() -Team クラスに記述したメソッドです...

そして、私はそれを試しました

ArrayList<Integer> list2 = new ArrayList<Integer>();

list2.add(1);

list2.add(2);

int help2 = list2.indexOf(1);
System.out.println(help2);

0 を返します

基本的に私が求めているのは、リストに複数の値を持つオブジェクトが含まれている場合に indexOf を使用する正しい方法ですか?

4

4 に答える 4

3

equalsクラスでメソッドをオーバーライドする必要がありますTeam。そのlist1.indexOf(something);ため、indexOfメソッドはオブジェクトを見つける方法を知っていますsomething

于 2013-04-22T11:48:35.940 に答える
2

Team クラスの hashcode と equals をオーバーライドする必要があります。

于 2013-04-22T11:50:02.207 に答える
0

そのsomethingオブジェクトが例全体で同じObject.equalsインスタンスである場合、同じインスタンスに対して true を返す が使用されているため、すべて問題ありません。

ただし、同じ値とすべてを持つ別のオブジェクトを作成している場合は、Object.equalsが返されfalseます。オブジェクト フィールドを考慮するequalsandメソッドを実装する必要があります。hashCode

于 2013-04-22T11:51:31.423 に答える