在java中存储给定键的数组

时间:2013-10-20 14:41:48

标签: java data-structures map

我想存储我的数据,以便我在一个城市(一个字符串)的多个位置(每个位置是一个对象)之间有一个关系。我对数据结构感到困惑。

我应该选择:

Map<String, List<Location>> data = new HashMap<String, List<Location>>

Map<String, List<Location>> data = new TreeMap<String, List<<Location>>

哪一个最适合我的要求。我知道Hash和Tree如何在数据结构中工作,但不确定它是如何在Java中实现的。

如果有更好的方法可供选择,那就不介意了。

3 个答案:

答案 0 :(得分:2)

如果您需要非常快速(常量)的操作(查找,添加,删除)并且不关心地图键的有序迭代,请使用哈希映射。如果您想要快速(对数)操作但又想要按排序顺序迭代地图键,请使用树形图。

答案 1 :(得分:0)

如何使用Guava的Multimap。在评论部分和@Justing上面说了哪个实现。这非常有用,因为你提到它有一些缺点(你需要检查是否存在密钥列表等)。

答案 2 :(得分:0)

TreeMap使用平衡二进制搜索树数据结构(红黑树),它使用O(log n)成本来查找,插入和删除数据。但另一方面,HashMap构成了the following cost

  

此实现为基本操作(get和put)提供了恒定时间性能,假设散列函数在桶之间正确地分散元素。 HashMap的一个实例有两个影响其性能的参数:   初始容量加载因子。   作为一般规则,默认加载因子(.75)提供了良好的效果   时间和空间成本之间的权衡。值越高,值越低   空间开销,但增加了查找成本(反映在大多数   HashMap类的操作,包括 get put )。预期的   应该考虑地图中的条目数量及其加载因子   设置初始容量时的帐户。因为,当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表重新哈希。所以最小化   重新运算的次数。如果初始容量大于   最大条目数除以加载因子,不重新哈希   操作将永远发生。

所以我们最好问一下这个问题:

  1. 我们是否需要将数据保存在订单中?如果是,那么我想我 应该使用TreeMap
  2. 或者我们只需要使用键值关系的映射然后我会使用 HashMap中。
  3. 对于您的用例,我认为选择应该是HashMap。