最适合重复元素的Java集合

最适合重复元素的Java集合,java,collections,Java,Collections,我目前正在做一个项目。我正在尝试创建一个商店的管理系统。问题是我需要某种类型的库存集合,当添加已经存在的同名元素(更新相同项目的数量)时,其状态(属性stockLevel)将根据给定的数量进行相应的更新。有人知道让谁做这样的事最好吗映射,设置或列表?这将是。您可以轻松地将自己的实现作为映射,或者使用现有的类之一,例如Google Guava。Apache Commons集合也有一个,Eclipse集合等也有一个。您可以轻松地将自己的实现作为映射,或者使用现有的类之一,例如Google Guava

我目前正在做一个项目。我正在尝试创建一个商店的管理系统。问题是我需要某种类型的库存集合,当添加已经存在的同名元素(更新相同项目的数量)时,其状态(属性stockLevel)将根据给定的数量进行相应的更新。有人知道让谁做这样的事最好吗<代码>映射,
设置
列表

这将是。您可以轻松地将自己的实现作为
映射
,或者使用现有的类之一,例如Google Guava。Apache Commons集合也有一个,Eclipse集合等也有一个。您可以轻松地将自己的实现作为
映射
,或者使用现有的类之一,例如Google Guava。apachecommons集合也有一个,Eclipse集合等也有一个

其中,添加已存在的同名元素时 (更新相同项目的编号)其状态(属性stockLevel) 将根据给定数量进行相应更新

在您的用例中,
Map
可以很好地存储信息:

Map
用于表示以as键
产品
和as值表示库存中的数量的Map:
StockLevel

对于在映射上进行迭代,您不能使用
HashMap
保持插入顺序,但出于您的需要,这应该不是问题

不过,如果您希望在迭代时保持插入顺序,或者希望根据某些需要(字母或其他)对映射进行排序,则可以使用更复杂的映射,例如
TreeMap
LinkedHashMap

其中,添加已存在的同名元素时 (更新相同项目的编号)其状态(属性stockLevel) 将根据给定数量进行相应更新

在您的用例中,
Map
可以很好地存储信息:

Map
用于表示以as键
产品
和as值表示库存中的数量的Map:
StockLevel

对于在映射上进行迭代,您不能使用
HashMap
保持插入顺序,但出于您的需要,这应该不是问题


尽管如此,如果您希望在迭代时保持插入顺序,或者希望根据某些需要(字母顺序或其他)对映射进行排序,则可以使用更复杂的映射,例如
TreeMap
LinkedHashMap

设置不允许重复值,但这不是一个解决方案。如果插入重复的值,将忽略该值。您可以选择项目列表,然后循环查找重复项。可以将if条件添加到增量状态。

设置不允许重复值,但这不是解决方案。如果插入重复的值,将忽略该值。您可以选择项目列表,然后循环查找重复项。可以将if条件添加到其状态中。

希望列表显然不合适。似乎一套或一张地图最有意义,不是吗?这在某种程度上取决于您希望如何访问它。@DaveNewton提到添加重复值。根据定义,Set不适合这种情况,至少没有比name属性更复杂的方法来处理不同的元素。你能定义你的“状态”吗?特别是,为什么它会嵌入到对象中?@MarkoGrešak No,要求是,如果您“添加一个同名项”,则该项的记录会相应更新。例如,查找,如果找到,您正在增加,比如说,数量。每个项目(名称,显然)都有关联的值,如果你“添加”了一个元素到结构中,你就是在更新数量,而不一定要添加一个新的项目。这里有两个要求:如何存储产品的值,以及如何访问它们。您需要的是一个组合支持存储的类(例如,映射或集合),以及一个接受产品并适当更新支持存储的函数。希望列表显然不合适。似乎一套或一张地图最有意义,不是吗?这在某种程度上取决于您希望如何访问它。@DaveNewton提到添加重复值。根据定义,Set不适合这种情况,至少没有比name属性更复杂的方法来处理不同的元素。你能定义你的“状态”吗?特别是,为什么它会嵌入到对象中?@MarkoGrešak No,要求是,如果您“添加一个同名项”,则该项的记录会相应更新。例如,查找,如果找到,您正在增加,比如说,数量。每个项目(名称,显然)都有关联的值,如果你“添加”了一个元素到结构中,你就是在更新数量,而不一定要添加一个新的项目。这里有两个要求:如何存储产品的值,以及如何访问它们。您需要的是一个组合备份存储(例如,映射或集合)的类,以及一个接受产品并适当更新备份存储的函数。当您可以在集合或映射中查找产品时,为什么要迭代列表?没有理由保留多个项目,只保留它们的关联数据。当您可以在集合或映射中查找产品时,为什么要迭代列表?没有理由保留多个项目,只保留它们的关联数据。