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

Java 实施矩阵的最佳方式(地铁站/地铁线路),java,matrix,implementation,Java,Matrix,Implementation,我正在用Java开发一个小型web应用程序,根据伦敦的地理位置,它可以找到最近的地铁站及其相应的线路。我试图找到最好的方法来表示度量衡-度量衡的关系。正如你所知,一个地铁站可以是多条线路的一部分。我现在正在做的是,我的数据库中有一个表,其关系表示为矩阵。大概是这样的: stationId | blueLine | blackLine | pinkLine | purpleLine | ... | greenLine 25 0 1 1

我正在用Java开发一个小型web应用程序,根据伦敦的地理位置,它可以找到最近的地铁站及其相应的线路。我试图找到最好的方法来表示度量衡-度量衡的关系。正如你所知,一个地铁站可以是多条线路的一部分。我现在正在做的是,我的数据库中有一个表,其关系表示为矩阵。大概是这样的:

stationId | blueLine | blackLine | pinkLine | purpleLine | ... | greenLine
    25          0          1          1           0                  1     
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;
其中,0和1是布尔值,表示车站是该地铁线路的一部分,不可为空,默认为0。当然,这些数据不会经常改变,他们不会经常建新的车站或线路,我认为每次我需要这些数据时都要调用数据库,这是一种过分的做法。我知道一个解决方案是缓存它,但我一直在想,如果用Java方法来存储这类数据对我来说更好:可能是一个metro对象的常量列表,某种包含所有metro stations数据的静态类,使用一个bean类,并使用依赖项注入来注入它


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

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

一个

HashMap <Station, List<Line>> 
比如说。这样您的查询将相当快,而且由于映射存储对象的指针,因此不会占用太多空间


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

我最终采用了与Simon建议类似的方法。我有:

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

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

PS:例如,可能有200个地铁站和10条地铁线路。非常感谢您的帮助,Simon。非常欢迎您:
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;