实现矩阵的最佳方式(地铁站/地铁线路)

时间:2013-04-04 15:44:40

标签: java matrix implementation

我正在开发一个Java的小型Web应用程序,它给出了一个伦敦地理位置,它找到了最近的地铁站及其各自的线路。我正在努力寻找代表metroStation的最佳方式 - metroLines关系。如您所知,一个地铁站可以是多条线路的一部分。我现在正在做的是我的数据库中有一个表,其关系表示为矩阵。像这样:

stationId | blueLine | blackLine | pinkLine | purpleLine | ... | greenLine
    25          0          1          1           0                  1     

其中0和1是布尔值,意味着该站是该地铁线路的一部分(不可为空,默认为0)。当然,这些数据不会经常变化(它们不会经常建立新的站点或线路)。我认为每次需要这些数据(这很多)时都要调用数据库,这有点过分。我知道一个解决方案可能是缓存它但我一直在考虑用于存储这些数据的Java方法对我来说更好:可能是一个常量的metro对象列表,某种静态类,其中包含所有地铁站数据,使用bean类并使用依赖注入注入它...

我想您的意见,您认为实施此功能的最佳方式是什么?

2 个答案:

答案 0 :(得分:0)

如果我真的必须将所有对象保存在内存中,我会为我需要的每种查询创建一个Map:

一个

HashMap<Line, List<Station>>

和一个

HashMap <Station, List<Line>> 
例如

。这样你的查询会相当快,因为​​地图存储了对象的指针,这不会占用更多的空间。

最后,您可以创建一个充当“数据访问层”的单例类,提供一组固定的查询方法来获取您需要的内容。

答案 1 :(得分:0)

我终于找到了与西蒙建议类似的东西。我有:

HashMap<MetroLine, List<MetroStation>> hmMetroLines;
EnumSet<MetroStation> esMetroStations;

MetroStation是Enum,其中包含所有行的数据。像这样:

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;

我使用Simon建议的Singleton类,创建HashMap和Set一次。