同一对象上的多个数据结构

时间:2012-04-14 16:04:48

标签: java data-structures map

让Person成为具有属性名称,年龄和idNumber的类。我希望有一个“人员”的集合,我希望能够以最有效的方式执行以下操作:

  1. 通过idNumber检索它们。
  2. 获取年龄>的人员列表; X
  3. 获取按名称按字母顺序排序的所有人员的列表。
  4. 我的想法是使用id作为键同时维护一个Hashmap,使用age和name作为每个TreeMaps的键,使用两个Treemaps。

    1. 这是最好的方法吗?
    2. 是否有必要在编辑年龄之前从年龄TreeMap中删除一个人然后将其重新插入?
    3. 如果对问题2的答案是肯定的,那么当该人员被使用并可能在多个地方进行编辑时,我该如何处理?

1 个答案:

答案 0 :(得分:2)

  

这是最好的方式吗?

我会说使用关系数据库和正确的索引是最好的方法,但是如果你想在内存中做这个,那么是 - 你牺牲内存来提高性能。

  

是否有必要在编辑年龄之前从年龄TreeMap中删除一个人,然后将其重新插入?

是。树中项目的位置在添加时确定一次。如果可比较属性(agename)发生更改,TreeMap将无法神奇地发现并移动对象。这很可能导致无法在地图中找到元素,即使它在那里。

  

如果对问题2的回答是肯定的,那么当这些人被使用并且可能在多个地方被编辑时,我该如何处理呢?

首选不可变对象,因此无法更改已放置在树中的对象。如果由于任何原因您无法负担,请考虑模式 - 在地图中存储Person时,在Person中注册一个侦听器。例如, age更改,侦听器通知按年龄存储人员的树(或其他观察者)并处理删除并添加回来。

顺便说一句,如果你试图在修改后删除某个对象,那么你将失败 - TreeMap将无法再找到要删除的对象......