我有以下问题,我想要一个像样的解决方案。
我有一个HashMap,它包含一些String(电子邮件)和对象(Person)形式的对象。
此地图通过方法 updatePersonList(收集列表)通过集合填充,如下所述:
每次通过上述方法接收到新集合时,地图基本上会将集合中的所有元素添加到地图中。这就是所有的地图需求,最新的集合。应该从地图中删除集合中没有的内容。
现在,我想知道如何有效地更新地图,因为可以在上面阅读,可以有以下几种情况:
1.在地图和集合中都可以找到一些对象,因此,只应保留集合中的新对象,而不是全部。
2.应删除地图中但不在集合中的对象。
在复杂性方面,最佳解决方案是什么?
经过一些调查后,我带来了从地图中删除所有对象并添加集合中的对象。如果有人知道更好的话,如果可以分享的话会更好。
答案 0 :(得分:3)
你永远不会比 O(n + m)更好,其中n是Collection
的大小,m是Map
的大小,因为你总会需要阅读至少两个。
因此,在 O 注释中,您只需擦除洞Map
并创建一个新洞。
但实际上,常量可能并非如此不重要,您也可能希望减少垃圾收集。在这种情况下,迭代两者并且仅从Map中删除所需的条目并将新元素从Collection添加到Map可能是有意义的。
但是只有剖析会告诉你,如果你为这项努力获得了什么。
答案 1 :(得分:0)
根据我的观点,使用Treemap而不是list来提高迭代性能,即(Treemap将只采用唯一值),以便新插入的对象将自动识别
成功设计树图后,不要删除地图上的标记,而是添加将在树形图中定义的新闻标记
我希望它会有所帮助
答案 2 :(得分:0)
如果列表的内容通常与地图相同,则可以在清理地图并添加新条目之前进行检查。