ArrayMap与HashMap

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

ArrayMap是线程安全的吗?

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

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

 ArrayMap var= new ArrayMap(); 

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

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

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

列表:

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

地图:

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

列表接口(ArrayList)是您使用索引访问的对象的有序集合,非常类似于数组(在ArrayList的情况下,顾名思义,它只是背景中的数组。您将使用ArrayList当你想按顺序保存事物时(它们被添加的顺序,或者实际上你添加对象时指定的列表中的位置)。

HashMap实现使用密钥对象的哈希值来定位它的存储位置,因此不再保证值的顺序。 然而,Java API中可以提供其他类,例如LinkedHashMap ,它使用哈希表来存储键/值对,还按照添加顺序维护键的List(LinkedList),这样您就可以按照添加的顺序(如果需要)再次访问这些项目。

何时使用数组?

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

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