4

ニーズ:

  • equals と hash コードをオーバーライドするクラスのオブジェクトを格納する
  • オブジェクトをループしてデータ構造に押し込みます
  • contains特定のオブジェクトが構造体に格納されているかどうかを確認するために呼び出すことができる必要があります
  • true を返す場合containsは、構造体からその特定のオブジェクトをフェッチし、getterそのオブジェクトで特定のを呼び出します

私が検討したオプション:

  • マップ - これはすべてのニーズに対応しますが、実際にはマップ (キーと値) がありません。私が持っているのはたくさんのオブジェクトだけです。オブジェクトをキーと整数または値に何かとして格納することにより、マップを強制的に使用することは良い習慣でしょうか?

  • Set は機能しますが、get のようなフェッチ メソッドはありません。

  • リストも機能しますが、インデックスベースではないフェッチする方法がありません。つまり、true が返されたらcontains、リストをループして特定のオブジェクトのインデックスを見つけ、それをフェッチする必要があります。

たとえば、apache commons や guava などのさまざまなライブラリを使用することにオープンです。

4

3 に答える 3

2

リストも機能しますが、インデックスベースではないフェッチする方法がありません。

ListindexOf(Object)あなたが望むことを正確に行うメソッドがあります。

于 2012-10-12T11:11:29.030 に答える
2

これでbest thing使用する は にscenarioなりますが、ペアMapに基づいて高速に取得できるためです。Key-Value

しかしList、インデックスに基づいてデータをフェッチすることもできます。

したがって、 aListまたは a のいずれかを使用できますMap。しかし、あなたの仕事をより簡単にするために、私はMap. オブジェクトMapの を検索する必要がないため、そのインデックスで をindex取得します。Objectフェッチは単なるone-line操作です。

// When using a List.
List<String> myList = new ArrayList<String>();
if (myList.contains("rohit")) {
    myList.get(myList.indexOf("rohit"));
}

// When using Map.
Map<String, String> myMap = new HashMap<String, String>();
// You can directly fetch your object, based on some Key if you have one..
myMap.get("key"); 
于 2012-10-12T11:13:41.330 に答える
-2

セットが必要です。あなたが言ったように、あなたはたくさんのオブジェクトしか持っていないので、あなたはフェッチメソッドを必要としません(あなたはそう思うでしょう)。これらはequalsとを使用するためhashCode、セットはまさに必要なものです。

もちろん、キーもセットであるため、マップも同様に機能しますが、データ構造の目的について少し混乱しているように見えるため、最終的には要件をより適切に指定する必要があります。私が理解していることから、実際には地図は必要ありません。

ハッシュセットの実装で十分です。これでできることは次のとおりです。

class Foo
{
    final String name;

    Foo(String name)
    {
        this.name = name;
    }

    boolean equals(Object obj)
    {
        return (obj instanceof Foo) && ((Foo)obj).name.equals(name);
    }
}

Set<Foo> fooSet = new HashSet<Foo>();

fooSet.add(new Foo("someFoo"));

assert fooSet.contains(new Foo("someFoo"));
于 2012-10-12T11:14:02.587 に答える