java - HashMap vs ArrayList 性能我是正确的

标签 java performance arraylist hashmap

我目前认为:

  • 当您需要一个从中随机检索项目的结构时 - 使用 HashMap
  • 当您将按顺序检索项目时(例如使用 for 循环) - 使用 ArrayList

我通常是正确的吗?是否存在不正确的情况?

最佳答案

map 是 map, or "associative array" .它具有键-> 值布局。另一方面,列表是 list ,这是一个有序的元素集合。

Set 和 List 之间可能会进行更直接的比较:两者都保存值,其中列表是明确排序的(您可以获得元素 #x),而集合(通常)不是有序(好吧,除非它是 SortedSet ,在这种情况下迭代顺序将由比较器排序)。

Set 和 List 最常见的两种实现是 HashSet 和 ArrayList。为了检查一个元素是否属于一个数组列表(contains(element)),实现迭代它的所有元素,检查是否使用 equals() 方法找到了该元素。要检查一个元素是否属于一个哈希集中,首先计算元素的 hashCode(),然后“直接”到该元素 应该所在的位置,并检查它是否在那里。

因此,ArrayList 和 HashSet 的一个显着区别在于 contains() 的速度

在列表中,除了可以对集合执行的操作(添加、删除、询问是否存在(包含)和迭代所有元素)之外,您还可以请求元素#x。

在 map 上,您可以通过键来请求元素,而不是像使用列表那样通过索引。

HashSet 目前仅由 HashMap 实现,其中不使用 key->value 关系的 value 部分。这完全是荒谬的,除了为插入 HashSet 中的每个和所有元素浪费至少 4 个字节(可以争论 12 个字节)之外没有任何用处。

关于java - HashMap vs ArrayList 性能我是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1518103/

相关文章:

c# - 使用具体类型而不是接口(interface)在性能方面是否更好

python - 使用 NumPy 从矩阵中获取最小/最大 n 值和索引的有效方法

java - 如何比较java中的两个Arraylist值?

java - 如何按字母顺序排序(没有 Comparable 或 Comparator 接口(interface))

java - 如何在 Swing 中淡化图像?

java - Android ImageButton 交换资源离开 'residue'

java - 为什么我们需要在Spring中指定HttpMessageConverter?

java - 如何从 JSON 数组中检索选定的数据?

c - C 中最快的 fgets 实现

java - 双属性上的比较器排序无法满足其一般契约