Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java集合哈希集与哈希映射_Java_Memory_Collections_Hashmap_Hashset - Fatal编程技术网

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
消耗的内存更少。但开销最小。