国家,州,城市,邮政编码层次结构

时间:2017-11-23 11:53:21

标签: java caching data-structures

我正在创建一个应用程序,我必须存储所有部门商店并想要缓存它。

层次结构如下: -

国家/地区 - >州 - >城市 - >面积 - >存储

我应该使用哪种数据结构所以我的应用程序将像

一样工作
  1. 我查询国家和州,它应该给我所有商店
  2. 我查询国家,州和城市,它应该给我该地区的所有商店。
  3. 我只想到Tree,但无法将此场景转换为此数据结构。

2 个答案:

答案 0 :(得分:1)

您声明要缓存信息。如果这是真的,你不想改变它,但缓存它,我建议放弃树的想法,只需根据你真正需要的组合构建两个地图,即:

  • 一个缓存将类型1密钥(由国家/地区和州组成)映射到商店列表
  • 将类型2密钥(包含国家,州和城市)映射到区域中的商店列表的一个缓存

这就是缓存的重点,实际上:你想把所有逻辑(哪个存储属于哪个键值组合)放入缓存的构造(初始或第一次请求)而不是从任何一种开始每次进行查找时迭代。

答案 1 :(得分:1)

所以只需构建层次结构,每个级别都包含下一级别的Map:

class Store {
   string name;
   // other stuff
}

class Area {
    string name;
    Map<string, Store> stores;
    // other stuff;
}

class City {
    string name;
    Map<string, Area> areas;
    // other stuff
}

class State {
    string name;
    Map<string, City> cities;
    // other stuff
}

class Country {
    string name;
    Map<string, State> states;
    // other stuff
}

您在班级范围内有Map个国家/地区:

Map<string, Country> countries;

如果您想要特定国家,州和城市的所有商店,首先必须获得对该城市的引用:

Country country = countries[countryName];
State state = country.states[stateName];
City city = state.cities[cityName];

现在,您可以访问每个商店:

for (Map.Entry<String, Area> pair : city.areas.entrySet())
{
    Area area = entry.getValue();
    for (Map.Entry<String, Store> storePair : areas.stores.entrySet())
    {
        // Here, pair.getKey() is the store name
        // and pair.getValue() is the Store object
    }
}

这实际上只是一个用嵌套字典实现的分层树。没什么好看的。