ArrayMap与HashMap

Sac*_*n M 10 java collections multithreading hashmap

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

ArrayMap是线程安全的吗?

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

我不想使用hashmap或并发hashmap.我想尝试下面的其他.哪一个是最好的选择如果我考虑线程的安全性和性能?

ArrayMap<String,String> var= new ArrayMap<String,String>(); 
Run Code Online (Sandbox Code Playgroud)

GrI*_*sHu -1

HashMap在底层使用数组,因此它永远不会比正确使用数组更快。

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

AnArrayList实现List接口,aHashMap实现Map接口。所以真正的问题是你什么时候想使用List,什么时候想使用Map。这就是 Java API 文档提供很大帮助的地方。

列表:

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

地图:

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

列表接口(ArrayList)是一个有序的对象集合,您可以使用索引访问这些对象,非常类似于数组(在 的情况下ArrayList,顾名思义,它只是后台的一个数组。ArrayList当您想保留事物按排序顺序排列(它们添加的顺序,或者实际上是您在添加对象时指定的列表中的位置)。

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

什么时候使用数组?

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

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

  • 好的,但这并没有将“ArrayMap”与“HashMap”进行比较,这就是问题所在。`ArrayMap`在这里:http://developer.android.com/reference/android/support/v4/util/ArrayMap.html (10认同)