2016-08-20 3 views
1

現在、1つのプロジェクトに取り組んでいます。私は店舗の管理システムを作成しようとしています。問題は、株式のための何らかのコレクションが必要なことです。同じ名前の既存の要素(同じ項目の数を更新する要素)を追加する際に、状態(属性stockLevel)が指定の量に応じて更新されます。誰かがそのようなことをさせるのに最善でなければならないことを知っていますか? Map,SetまたはList重複する要素に最も適したJavaコレクション

+0

リストが適切でないことは明らかです。セットやマップのように思えるのが最も理にかなっていますか?それはあなたがそれにアクセスする方法に依存します。 –

+0

@DaveNewton重複した値を追加することに言及しています。定義は、少なくともこの例では適切ではありません。 –

+0

"状態"を定義できますか?特に、オブジェクト内に埋め込まれている理由は何ですか? – fge

答えて

3

これはa multiset (a.k.a. a bag)となります。独自の実装を簡単にMap<Item, Integer>としてロールバックするか、既存のクラスの1つ、たとえばGoogle GuavaのMultiset (stockLevel属性)それは状態だ(同じ項目の数を更新する)すでに同じ名前 に存在する要素を加えながら はに応じて更新してしまうのApache Commonsのコレクションはまたなどを一つ持っているので、Eclipseのコレクションを行う

1

所定量あなたのユースケースで

Map情報を格納するために良好である:

Map<Product, StockLevel>それの数などの主要Productとマップを表す値として在庫内:StockLevel

マップ上での反復処理では、HashMapの挿入注文を維持できませんでしたが、必要であれば問題ありません。あなたは、あなたがマップが(アルファベット順または他の)いくつかのニーズに応じて注文することにしたいということで反復時や挿入順序を保持したい場合は

それにもかかわらず、あなたはより洗練されたマップを使用することができますようTreeMapLinkedHashMap

0

セットは重複する値を許可しませんが、これは解決策ではありません。重複した値を挿入すると無視されます。アイテムのリストを選択し、ループを繰り返して重複を見つけることができます。 if条件を追加してその状態を増やすことができます。

+0

セットやマップで商品を検索するときに、リストを繰り返し繰り返すのはなぜですか?関連するデータだけで複数のアイテムを保持する理由はありません。 –

関連する問題