0

それを解決するためにどのデータ構造を使用すべきかわかりません。次のように、カテゴリのリストとそれらに関連付けられている値のリストがあります。

Categories           Values 
Smart             **person1**,person2
Handsome          person3,person6,**person1**
Hard-Working      person7,person9

たとえば、person1は、ハンサムとスマートの両方のカテゴリに属しているため、スマートでハンサムです。(値(人)は多くのカテゴリに分類できます)そしてperson2はスマートですが、ハンサムではありません。

人物オブジェクトには名前、年齢、性別があります。たとえば、人物1は

John 43 Male

どうすれば設計できるのか気になります。2次元配列を考えていましたが、予備の場所があるのでお勧めできません。

Cat1 v3,v6 Spare Spare
Cat2 v10 Spare Spare Spare
cat4 v6,v7,v8,v9

リストを作成するのが最善だと思いますが、どの値がどのカテゴリに対応しているかわからない(上記の例のcat1とcat4の両方に関連付けられているV6のように)

 V3 v6 v7 v8 v9 v10
4

2 に答える 2

3

あなたは次のようなものを使うことができます

Map<Category, List<Person>>

MapO(1)アクセスを提供する必要があるため、キーを最も検索するために使用するものにする必要があります(私の場合は、私が収集したものからのカテゴリ)。だからあなたが持っているなら

Map<Category, List<Person>> categoryLookup = new HashMap<Category, ArrayList<Person>>();

できるよ

List<Person> values = myCategoryLookup.get(someCategory);

次に、値を繰り返し処理します。同じ値への参照は複数のリストに含まれる可能性がありますが、これは問題ではありません。

以下のヤメオの場合、人のカテゴリを取得したい場合は、次のいずれかを実行できます。

  1. そのカテゴリのリストをPerson維持している
  2. 上記のデータ構造を「逆」にします。つまり、Map<Person, List<Category>>

これらのソリューションの代替手段はCategoryPersonクラス自体に関係を設定することです。たとえば、Personはそのクラスプロパティの1つとしてを持ち、List<Category>同様にそのクラスプロパティの1つとしてを持ちます。しかし、これはデータ構造の問題であると私は感じています。これは、実際のデータを含むデータベースがあり、ORMツールを使用してデータをJavaクラスにマップする場合におそらく行うことです。CategoryList<Person>

于 2012-09-27T14:12:29.177 に答える
1

データベースでは、ジャンクションテーブルを使用します。多対多も参照してください。必要なものに応じてenum、カテゴリに、およびMultiMap<Person, Category>ストレージにを使用できます。

于 2012-09-27T14:20:35.697 に答える