Мое приложение считывает список местоположений из XML-файла, сохраняя их как Location
объекты:
public class Location {
private int id;
private double latitude;
private double longitude;
}
Созданные объекты будут сохранены в ArrayList<Location> locationList
. Размер используемых входных файлов может варьироваться, но для примера файла, который я тестирую, есть более 200 мест. После того, как приложение выполнит синтаксический анализ файла, новое местоположение не будет добавлено до конца сеанса времени выполнения.
Я хочу создать матрицу прямых расстояний между всеми точками. Направление не имеет значения: расстояние от А до В и наоборот всегда будет одинаковым. Какие из следующих коллекций больше подходят для представления вышеуказанной информации:
ArrayList<ArrayList<Double>>
HashMap<Integer, HashMap<Integer, Double>>
, где два вышеупомянутых символа используют Location.id
в качестве индекса / ключа или
HashMap<Location, HashMap<Location, Double>>
, где в качестве ключа используется сам объект Location
.
Приложение обращается к матрице, вызывая метод distanceOf(int locationIdA, int locationIdB)
.
* * * * * * * * ArrayList
кажется наиболее распространенной реализацией из-за своей простоты, но она кажется неэффективной? distanceOf(A, B)
всегда будет таким же, как distanceOf(B, A)
, а distanceOf(A, A)
всегда будет 0.
Учитывая вышесказанное, я думаю, я всегда могу добавить несколько строк кода примерно так:
public double distanceOf(int idA, int idB) {
double dist = 0;
if (idA != idB) {
// dist = idA < idB ? matrix[idA][idB] : matrix[idB][idA];
}
return dist;
}
Благодаря тому, что первый id
, переданный в матрицу, всегда меньше, возможно, использование HashMap
более эффективно сейчас, но так ли это на самом деле? Есть ли другие соображения?
Какую из трех коллекций мне следует использовать?