我正在创建一个应用程序,我必须存储所有部门商店并想要缓存它。
层次结构如下: -
国家/地区 - >州 - >城市 - >面积 - >存储
我应该使用哪种数据结构所以我的应用程序将像
一样工作我只想到Tree,但无法将此场景转换为此数据结构。
答案 0 :(得分:1)
您声明要缓存信息。如果这是真的,你不想改变它,但只缓存它,我建议放弃树的想法,只需根据你真正需要的组合构建两个地图,即:
这就是缓存的重点,实际上:你想把所有逻辑(哪个存储属于哪个键值组合)放入缓存的构造(初始或第一次请求)而不是从任何一种开始每次进行查找时迭代。
答案 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
}
}
这实际上只是一个用嵌套字典实现的分层树。没什么好看的。