我想存储我的数据,以便我在一个城市(一个字符串)的多个位置(每个位置是一个对象)之间有一个关系。我对数据结构感到困惑。
我应该选择:
Map<String, List<Location>> data = new HashMap<String, List<Location>>
或
Map<String, List<Location>> data = new TreeMap<String, List<<Location>>
哪一个最适合我的要求。我知道Hash和Tree如何在数据结构中工作,但不确定它是如何在Java中实现的。
如果有更好的方法可供选择,那就不介意了。
答案 0 :(得分:2)
如果您需要非常快速(常量)的操作(查找,添加,删除)并且不关心地图键的有序迭代,请使用哈希映射。如果您想要快速(对数)操作但又想要按排序顺序迭代地图键,请使用树形图。
答案 1 :(得分:0)
如何使用Guava的Multimap。在评论部分和@Justing上面说了哪个实现。这非常有用,因为你提到它有一些缺点(你需要检查是否存在密钥列表等)。
答案 2 :(得分:0)
TreeMap使用平衡二进制搜索树数据结构(红黑树),它使用O(log n)成本来查找,插入和删除数据。但另一方面,HashMap构成了the following cost:
此实现为基本操作(get和put)提供了恒定时间性能,假设散列函数在桶之间正确地分散元素。 HashMap的一个实例有两个影响其性能的参数: 初始容量和加载因子。 作为一般规则,默认加载因子(.75)提供了良好的效果 时间和空间成本之间的权衡。值越高,值越低 空间开销,但增加了查找成本(反映在大多数 HashMap类的操作,包括 get 和 put )。预期的 应该考虑地图中的条目数量及其加载因子 设置初始容量时的帐户。因为,当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表重新哈希。所以最小化 重新运算的次数。如果初始容量大于 最大条目数除以加载因子,不重新哈希 操作将永远发生。
所以我们最好问一下这个问题:
对于您的用例,我认为选择应该是HashMap。