我应该使用2D ArrayList或HashMap表示距离矩阵吗?

时间:2019-03-28 01:02:25

标签: java arraylist collections hashmap

我的应用程序从.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效率更高,但这是真的吗?还有其他考虑事项吗?

我应该使用三个集合中的哪个?

0 个答案:

没有答案