HashMap的ArrayList的VS性能我是正确的(HashMap vs ArrayList p

2019-07-20 21:04发布

我目前认为:

  • 当你需要一个结构,从中你会被随机检索项目-使用HashMap
  • 当你将被检索,以便项目(例如,使用一个for循环) -使用ArrayList

难道我通常是正确的? 是否有情况下这是不正确的?

Answer 1:

一般情况下,是的,你是正确的。 还有一个组合的数据结构,在LinkedHashMap的 ,它提供了对任意元素的快速访问,以及可预测的顺序。

不过,值得注意的是,ArrayList和HashMap的分别只有两个列表和地图接口的实现。 有每一个可能更适合有特殊要求的其他实现。 例如,一个LinkedList可能提供比某些排队/出队要求一个ArrayList更高的性能。



Answer 2:

地图是地图,或“关联数组” 。 它有一个键 - >值的布局。 列表是对另一方面一个清单 ,这是元素的有序集合。

更直接的比较就可能会与列表之间:这两个抱值,其中列表被明令(你可以得到元素#X),并集(通常情况下)不下令(当然,除非它是一个SortedSet的 ,在这种情况下,迭代顺序将由比较器来排序)。

对于设置和列表两种最常见的实现是HashSet的和ArrayList。 要检查如果一个元素在一个ArrayList属于(含有(元件)),执行迭代过的它的所有元素,检查一个是否已经发现使用equals()方法的元素。 要检查是否一个元素在一个HashSet所属第一元素的hashCode()方法进行计算,然后一个变为“直接”到位置该元件应该驻留,并检查它是否是存在的。

因此,ArrayList和HashSet的之间的显著差的速度含有()。

在列表中,你可以要求元素#X,除了可以在一组,这是添加,删除,请问,是否存在的(包含)做什么,以及遍历所有元素。

在地图上,你可以通过它的索引,你有一个清单做要求其键的元素,而不是。

一个HashSet目前由其中不使用键- >值的关系的值部分一个HashMap简单地实现。 这完全是荒谬的,没有任何使用其他不是浪费至少4个字节,就可以说12,为每一位和插入HashSet的所有元素。



Answer 3:

我要说的是,你通常是正确的,但不能完全准确。 您可以使用一个HashMap进行数据检索,但并不总是随意。 您可以使用一个ArrayList迭代,但你也可以通过索引用它来查找。

更一般地,你用Map实现时,你需要有效地检索由查询,例如项目检索基础上,关键的东西-如字典,高速缓存,信息库等。

您可以使用一个List实现时,你只想要一个数据结构,其中,当你希望他们在预定的和/或可预测的顺序,你可以遍历数据,通常。

换句话说,你可以使用Map S作为索引数据结构,并使用List S作为你通常会使用数组。



Answer 4:

对我来说,它更我是否关心集合中的项目的顺序。 如果你关心的顺序,然后使用ArrayList的。 如果你不关心顺序(你只是想保存一堆物品的),那么你可以使用HashMap。



Answer 5:

不要忘记它也快得多去一个特定项目与地图(如果你有钥匙),比它从一个数组(除非你有一个指标,但关键的总是会得到你正确的值,而具有如果新元素插入或旧的删除)指数可能无法正常工作。



Answer 6:

我有点不同意。 对我来说,更多地取决于我多么想取回物品。 如果我想基于像他们为了做到这一点(通过索引,要准确)我会倾向于使用线性结构像一个ArrayList(甚至数组)。 如果我需要查找的物品,我会使用一个映射结构如HashMap。

另一个复杂的因素有做插入和秩序,丹指出。



文章来源: HashMap vs ArrayList performance am I correct