我的应用程序从.xml文件中读取位置列表,并将其存储为Location
对象:
public class Location {
private int id;
private double latitude;
private double longitude;
}
实例化的对象将存储在ArrayList<Location> locationList
中。所使用的输入文件的大小可能会有所不同,但是我正在测试的示例文件中有200多个位置。在应用程序完成文件解析之后,将不会为运行时会话的其余部分添加新位置。
我想创建所有点之间的直线距离矩阵。方向无关紧要:从A到B的距离,反之亦然。以下哪个集合更适合表示上述信息:
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
效率更高,但这是真的吗?还有其他考虑事项吗?
我应该使用三个集合中的哪个?