在Java中添加,访问或从ArrayList中删除元素的算法成本是多少?

时间:2012-07-02 10:55:06

标签: java algorithm big-o

我有一个Web应用程序,它广泛使用ArrayList's来存储和操作自身内部的数据。但是,最近我明白HashMap's可能是更好的选择。任何人都可以告诉我从两者中添加,访问和删除元素的算法成本(Big O(n))究竟是什么,以及为了提高效率而进入代码并更改它们是否明智?

3 个答案:

答案 0 :(得分:8)

对于ArrayList:

  

运行size,isEmpty,get,set,iterator和listIterator操作   在恒定的时间。添加操作以分摊的常量时间运行,   也就是说,添加n个元素需要O(n)时间。所有其他的   操作以线性时间运行(粗略地说)。不变因素   与LinkedList实现相比较低。

从文档中: http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

对于HashMap:

  

此实现为基本提供了恒定时间性能   操作(获取和放置),假设散列函数分散了   桶中的元素恰到好处。迭代集合视图   需要与HashMap实例的“容量”成比例的时间   (桶数)加上其大小(键值的数量   映射)。因此,不设置初始容量非常重要   如果迭代性能是太高(或负载因子太低)   重要的。

从文档中: http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

答案 1 :(得分:1)

ArrayList的文档讨论了这些操作的性能。对于HashMap,所有三个都是O(1)。但是,这确实假设您的hashCode方法已得到很好的实施,并且也是O(1)

答案 2 :(得分:1)

请查看http://www.coderfriendly.com/wp-content/uploads/2009/05/java_collections_v2.pdf

  • O(1)获取/添加
  • O(n)for contains
  • O(1)for next