让Person成为具有属性名称,年龄和idNumber的类。我希望有一个“人员”的集合,我希望能够以最有效的方式执行以下操作:
我的想法是使用id作为键同时维护一个Hashmap,使用age和name作为每个TreeMaps的键,使用两个Treemaps。
答案 0 :(得分:2)
这是最好的方式吗?
我会说使用关系数据库和正确的索引是最好的方法,但是如果你想在内存中做这个,那么是 - 你牺牲内存来提高性能。
是否有必要在编辑年龄之前从年龄TreeMap中删除一个人,然后将其重新插入?
是。树中项目的位置在添加时确定一次。如果可比较属性(age
或name
)发生更改,TreeMap
将无法神奇地发现并移动对象。这很可能导致无法在地图中找到元素,即使它在那里。
如果对问题2的回答是肯定的,那么当这些人被使用并且可能在多个地方被编辑时,我该如何处理呢?
首选不可变对象,因此无法更改已放置在树中的对象。如果由于任何原因您无法负担,请考虑observer模式 - 在地图中存储Person
时,在Person
中注册一个侦听器。例如, age
更改,侦听器通知按年龄存储人员的树(或其他观察者)并处理删除并添加回来。
顺便说一句,如果你试图在修改后删除某个对象,那么你将失败 - TreeMap
将无法再找到要删除的对象......