ArrayMap与HashMap

时间:2013-10-18 04:07:14

标签: java multithreading collections hashmap

org.apache.myfaces.trinidad.util.ArrayMapjava.util.HashMap的主要区别是什么?

ArrayMap是否是线程安全的?

在文档中提到Array在性能方面是最好的。

我不想使用hashmap或并发hashmap。我想尝试下面的其他。哪一个是最佳替代方案如果我考虑线程安全性和性能?

ArrayMap<String,String> var= new ArrayMap<String,String>(); 

1 个答案:

答案 0 :(得分:-1)

HashMap 使用下面的数组,因此它永远不会比正确使用数组更快。

Random.nextInt()比你测试的慢很多倍,即使使用数组测试一个数组也会偏向你的结果。你的数组如此慢的原因是由于等于比较,而不是数组访问本身。

ArrayList实现List接口,HashMap实现Map接口。所以真正的问题是你何时想要使用List以及何时想要使用Map。这是Java API文档有用的地方。

<强>列表:

有序集合(也称为序列)。该接口的用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。

<强>地图

将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值。

列表接口(ArrayList)是您使用索引访问的对象的有序集合,非常类似于数组(在ArrayList的情况下,顾名思义,它只是一个数组在后台。当你想要保持排序顺序(它们被添加的顺序,或者你添加对象时指定的列表中的位置)时,你会使用ArrayList

HashMap实现使用密钥对象的哈希值来定位它的存储位置,因此无法保证值的顺序。但是,Java API中还有其他类可以提供此类,例如, LinkedHashMap,以及使用哈希表来存储键/值对,还按照添加顺序维护键的List(LinkedList),因此您可以始终按顺序访问项目他们被添加(如果需要)。

何时使用数组?

永远不要低估数组。大多数情况下,当我们必须使用对象列表时,我们倾向于考虑使用向量或列表。但是,如果集合的大小已知并且不会更改,则可以将数组视为潜在的数据结构。访问数组的元素比使用向量或列表更快。这很明显,因为你需要的只是一个索引。额外的get方法调用没有开销。

有时,最好使用上述方法的组合。例如,您可以使用HashMap的ArrayList来满足特定需求。