与org.apache.myfaces.trinidad.util.ArrayMap
和java.util.HashMap
的主要区别是什么?
ArrayMap是否是线程安全的?
在文档中提到Array在性能方面是最好的。
我不想使用hashmap或并发hashmap。我想尝试下面的其他。哪一个是最佳替代方案如果我考虑线程安全性和性能?
ArrayMap<String,String> var= new ArrayMap<String,String>();
答案 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来满足特定需求。