2012-05-06 63 views
1

需要选择最佳数据结构以便快速处理位置和区域列表。要选择哪种数据结构?

没有为地点(城市)简单的POJO:

public class Location { 

    private String name; 
    private int post; //id 

而对区(县):

public class Region { 
    private String name; 
    private int id; 
    private List<Location> cities; 

最后我有RegionList对象。 我需要做的:

  1. 其职位(ID)
  2. 搜索位置张贴由它的名字命名的搜索位置。 :名称不是唯一的,所以我需要更喜欢另一些具体的位置在相同的名称

的问题是数据结构,我应该使用什么样的情况? 我想到了包含所有区域的所有位置的TreeMap。所以我可以通过名称(字符串)快速获取位置。 对于第1页。我有解决方案:位置post包含区域的id。因此,如果区域ID = 1,那么它的位置帖子将是10001,10002等。 或者我可能需要选择Guava引入的一些新的集合类型,因为它已经出现在项目中了?

+6

你不应该通过id链接实体,你应该通过引用直接链接它们,这就是它们的用途。 – svick

+0

@svick我需要在这里使用id来与客户端一起工作,客户端只发送和接收id的 – vacuum

回答

2

添加的所有位置两个HashMap S:

  1. 其中一个包含所有以位置名称作为关键字和位置列表作为值的位置。
  2. 其他以id为键和位置为值?

最好将两个hashmaps隐藏在一个类中,为您查找。

或者我错过了什么?

+0

好点,但仍然有两个问题:如何定义“首选”位置(如果名称相同)。也许在位置中添加“优先级”字段。第二:如何巧妙地将原始List的变化与这两张地图同步? – vacuum

+0

那么一个位置优先于另一个吗?我为每个名字建议了一个位置列表(List作为Map中的值)。因此,将它们按照首选顺序添加到列表中(如果有的话)并选择第一个(然后根本不需要列表)。或者您可以向他们展示其他信息,例如地区。第二点是面向对象,将其隐藏在一个类的后面,只在一个地方更新,该地点更新地图等。 –

2

我建议你创建LocationRepository类:

class LocationRepository { 
    Location getById(int id); 
    Collection<Location> getByName(String id); 
} 

这个仓库应保持2个集:地图(无论是HashMap的或TreeMap的位置:Map<Integer, Location>,其中关键是位置ID第二个地图应该是。[MulitMap][1]番石榴该名称和位置相匹配的集合之间映射

+0

MultiMap实现选择什么? – vacuum

+0

@真空实施取决于您的应用需求。你可以找到许多Multimap实现。 HashMultimap是一个选择,请注意你应该覆盖hashcode并且等于key类的方法。 –