1

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

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

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

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

4

2 回答 2

0

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

HashMap<Line, List<Station>>

和一个

HashMap <Station, List<Line>> 

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

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

于 2013-04-04T15:52:14.873 回答
0

我终于选择了类似于西蒙建议的东西。我有:

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;

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

于 2013-04-05T15:37:42.520 回答