首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现矩阵的最佳方式(地铁站/地铁线)

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

Stack Overflow用户
提问于 2013-04-04 23:44:40
回答 2查看 857关注 0票数 1

我正在用Java开发一个小的web应用程序,它给出一个伦敦的地理位置,它会找到最近的地铁站及其各自的线路。我正在尝试找到表示metroStation - metroLines关系的最佳方式。正如你所知道的,一个地铁站可以是几条线路的一部分。我现在正在做的是在我的数据库中有一个表,其中的关系表示为一个矩阵。如下所示:

代码语言:javascript
复制
stationId | blueLine | blackLine | pinkLine | purpleLine | ... | greenLine
    25          0          1          1           0                  1     

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-04 23:52:15

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

代码语言:javascript
复制
HashMap<Line, List<Station>>

和一个

代码语言:javascript
复制
HashMap <Station, List<Line>> 

例如。这样,您的查询将相当快,而且由于Map存储对象的指针,因此不会占用太多空间。

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

票数 0
EN

Stack Overflow用户

发布于 2013-04-05 23:37:43

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

代码语言:javascript
复制
HashMap<MetroLine, List<MetroStation>> hmMetroLines;
EnumSet<MetroStation> esMetroStations;

其中MetroStation是一个枚举,包含它所属行的所有数据。如下所示:

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15815803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档