我正在用Java开发一个小的web应用程序,它给出一个伦敦的地理位置,它会找到最近的地铁站及其各自的线路。我正在尝试找到表示metroStation - metroLines关系的最佳方式。正如你所知道的,一个地铁站可以是几条线路的一部分。我现在正在做的是在我的数据库中有一个表,其中的关系表示为一个矩阵。如下所示:
stationId | blueLine | blackLine | pinkLine | purpleLine | ... | greenLine
25 0 1 1 0 1 其中,0和1是布尔值,表示车站是该地铁线的一部分(不可为空,默认为0)。当然,这些数据不会经常更改(他们不会经常建立新的站点或线路),而且我认为每次需要这些数据时调用数据库(这是很多)有点过头了。我知道一个解决方案可能是缓存它,但我一直在想,如果Java方法存储这些类型的数据对我来说更好:也许是一个常量的地铁对象列表,或者是包含所有地铁站数据的某种静态类,使用一个bean类并使用依赖注入注入它……
我想听听您的意见,您认为实现此功能的最佳方式是什么?
发布于 2013-04-04 23:52:15
如果我真的必须将所有对象都放在内存中,我会为我需要的每种查询创建一个Map:
一
HashMap<Line, List<Station>>和一个
HashMap <Station, List<Line>> 例如。这样,您的查询将相当快,而且由于Map存储对象的指针,因此不会占用太多空间。
最后,你可以创建一个单例类来充当你的“数据访问层”,提供一组固定的查询方法来获取你需要的东西。
发布于 2013-04-05 23:37:43
我最终选择了与Simon建议的类似的方法。我有:
HashMap<MetroLine, List<MetroStation>> hmMetroLines;
EnumSet<MetroStation> esMetroStations;其中MetroStation是一个枚举,包含它所属行的所有数据。如下所示:
public enum MetroStation{
METRO1(1, true, false, true, false, false, false, false, false, false, false,
false, false, false, false, false, false, "descirption1"),
METRO2(2, true, true, false, false, false, false, false, false, false, false,
false, false, false, false, false, false, "description2"),...
private int id;
private boolean line1;
private boolean line2;
private boolean line3;
...
private boolean line14;
private String description;我按照西蒙的建议使用单例类,只创建一次HashMap和Set。
https://stackoverflow.com/questions/15815803
复制相似问题