Java集合哈希集与哈希映射
我对使用Java集合哈希集与哈希映射,java,memory,collections,hashmap,hashset,Java,Memory,Collections,Hashmap,Hashset,我对使用集合的内存最佳实践有疑问。我需要调用一个经常返回成对(键、值)的方法,因此使用HashMap或创建一个包含键和值的对象并将该对象保存在HashSet 感谢与问候。这取决于您是需要单独基于键还是同时基于键和值来搜索数据结构 如果仅按键搜索(即map.containsKey(键)),则应使用HashMap 如果搜索是否存在键值对(即set.contains(新对(键,值)),则应使用包含这些对的HashSet) 另一个要考虑的因素是如何确定元素的唯一性。如果它是由密钥单独决定的,则应该使
集合
的内存最佳实践有疑问。我需要调用一个经常返回成对(键、值)的方法,因此使用HashMap
或创建一个包含键和值的对象并将该对象保存在HashSet
感谢与问候。这取决于您是需要单独基于键还是同时基于键和值来搜索数据结构
- 如果仅按键搜索(即
),则应使用map.containsKey(键)
HashMap
- 如果搜索是否存在键值对(即
),则应使用包含这些对的set.contains(新对(键,值)
)HashSet
另一个要考虑的因素是如何确定元素的唯一性。如果它是由密钥单独决定的,则应该使用<代码> HashMap < /代码>。如果它是由键和值决定的(也就是说,同一个键可以出现两次不同的值)。,您必须使用
HashSet
,因为hashmap
不允许同一个键出现多次。您还可以在“键值”中添加一些特殊功能对象如果需要谢谢,我需要的是保存键和值而不重复,以及每个方法调用最多保存10个对象的对象,但调用频率通常为每秒1个,因此我想使用占用更少内存的方法。@Hazim但是如何访问此数据结构?是否要迭代整个方法调用重新数据,或搜索是否存在特定值?是否允许同一个键以不同的值出现两次?我迭代该键值,无需仅搜索save object和iterator。我已重写keyvalue类的哈希代码以防止duplication@Hazim根据您的评论,我可以假设您的收藏需要允许同一个键对不同的值显示两次,因此必须使用HashSet
,而不能使用HashMap
。“我应该使用哪个数据结构”的答案总是“取决于您需要对它做什么”。您能详细说明您的需要吗?请参考本教程,希望它能更好地帮助您。这两种方法都有各自的用途,可能取决于键在概念上是值的“一部分”(HashSet)还是独立于值(HashMap)。谢谢大家,我需要的是不重复地保存键和值,以及每个方法调用最多保存10个对象的对象,但调用频率通常为每秒1个,因此我希望使用消耗更少内存的方式。HashSet
是HashMap
的薄包装(查看源代码,搜索私有瞬态HashMap
)因此理论上,HashMap
消耗的内存更少。但开销最小。