Тот факт, что предоставляемый API основан на байтах [], не должен обязательно определять внутренние детали вашего кэша.
Второе наблюдение заключается в том, что это не проблема обобщенной структуры данных. И пространство всех аэропортов, и пространство всех городов конечны и хорошо известны. (Вы даже знаете размер).
Хеш-карты, деревья и т. Д. - это все алгоритмы, которые гарантируют определенные характеристики производительности в установленных пределах для общего использования .
Поскольку целостность данных не является проблемой («данные не меняются») и если соображения относительно пространства не являются критическими («как можно быстрее»), то почему бы и нет:
[Редактировать: этот бит каким-то образом теряется в вырезке и вставке: Вы индексируете (нумеруете) свои города и аэропорты, учитывая, что вы знаете эти наборы и они фактически статичны.]
// these need to get initialized on startup
// this initialization can be optimized.
Map<byte[], Long> airportIndexes = new HashMap<byte[], Long>(NUMBER_OF_AIRPORTS);
Map<byte[], Long> citiesIndexes = new HashMap<byte[], Long>(NUMBER_OF_CITIES);
Map<Long, byte[]> airports = new HashMap<Long, byte[]>(NUMBER_OF_AIRPORTS);
Map<Long, byte[]> cities = new HashMap<Long, byte[]>(NUMBER_OF_CITIES);
long[][] airportToCitiesMappings = new byte[NUMBER_OF_AIRPORTS][];
long[][] citiesToAirportMappings = new byte[NUMBER_OF_CITIES][];
public List<byte[]> getCitiesNearAirport(byte[] airportName) {
Long[] cityIndexes = getCitiesByIdxNearAirport(airportName);
List<byte[]> cities = new ArrayList<byte[]>(cityIndexes.length);
for(Long cityIdx : cityIndexes) {
cities.add(cities.get(cityIdx));
}
return cities;
}
public long[] getCitiesByIdxNearAirport(Long airportIdx) {
return airportToCitiesMappings[airportIdx];
}
public long[] getCitiesNearAirport(byte[] airportName) {
return getCitiesNearAirport(airportIndexes.get(airportName));
}
public long[] getCitiesNearAirport(Long airportIdx) {
return airportToCitiesMappings[airportIdx];
}
// .. repeat above pattern for airports.
Это должно дать вам O (1) временные характеристики производительности. Существует значительная избыточность с точки зрения пространства.