什么是基本Java容器上的CRUD操作的渐近复杂性

时间:2013-08-19 23:32:19

标签: java big-o

我试图找出Java基本集合上的操作的复杂性(使用big-o表示法)。与此{+ 3}}中的C ++语言类似。

以下是我所拥有的,使用常识:

解释

的ArrayList

  • add(E e) O(1)
  • add(int index,E e) O(n)
  • set(int index,E element O(1)
  • get(int index) O(1)
  • remove(E e)remove(int index) O(n)
  • 包含(E e) O(n)
  • list concatenation(addAll) O(n)

链表

  • add(E e) O(1)
  • add(int index,E e) O(n)
  • set(int index,E element O(n)
  • get(int index) O(n)
  • remove(E e)remove(int index) O(n)
  • 包含(E e) O(n)
  • list concatenation(addAll) O(1)

HashSet和LinkedHashSet

  • add(E e) O(1)
  • 删除(E e) O(1)
  • 包含(E e) O(1)
  • 使用iterator查找/获取元素 O(n)

TreeSet中

  • add(E e) O(log n)
  • 删除(E e) O(log n)
  • 包含(E e) O(log n)
  • addAll O(n log n)
  • 在实现二进制搜索时使用iterator O(n)或者 O(log n)查找元素

地图

HashMap和LinkedHashMap

  • put(K键,V值) O(1)
  • get(K key) O(1)
  • 删除(E e) O(1)
  • containsKey(对象键) O(1)
  • containsValue(对象值) O(n)
  • putAll O(n)
  • 使用iterator O(n)或者 O(log n)查找/获取元素,与TreeSet
  • 相同

TreeMap的

  • put(K键,V值) O(log n)
  • get(K key) O(log n)
  • 删除(E e) O(log n)
  • containsKey(对象键) O(log n)
  • containsValue(对象值) O(n)
  • putAll O(n log n)
  • 使用iterator查找/获取元素 O(n)

注意:基于散列的集合假定设计良好的散列函数位于 O(1)中,否则它位于 O(n)

问题: 这是对的吗?

1 个答案:

答案 0 :(得分:2)

关于此的最佳知识来源是文档。这是我可以通过快速搜索或两个找到的。

解释

ArrayList

  

sizeisEmptygetsetiteratorlistIterator操作会在固定时间内运行。 add操作以分摊的常量时间运行,即添加n个元素需要O(n)时间。所有其他操作都以线性时间运行(粗略地说)。

LinkedList

  

所有操作的执行都与双向链表一样。索引到列表中的操作将从开头或结尾遍历列表,以较接近指定索引为准。

从我记得的双向链表,我会说你的“常识假设”是正确的。

HashSet

  

该类为基本操作(添加,删除,包含和大小)提供恒定的时间性能,假设散列函数在桶之间正确地分散元素。迭代此集合需要的时间与HashSet实例的大小(元素数量)加上后备HashMap实例的“容量”(桶数)之和成比例。

LinkedHashSet

  

与HashSet类似,它为基本操作(添加,包含和删除)提供了恒定时间性能,假设哈希函数在桶之间正确地分散元素。由于维护链表的额外费用,性能可能略低于HashSet的性能,但有一个例外:对LinkedHashSet的迭代需要与集合大小成比例的时间,而不管其容量如何。对HashSet的迭代可能更昂贵,需要与其容量成比例的时间。

TreeSet

  

此实现为基本操作(添加,删除和包含)提供了有保证的log(n)时间成本。

地图

HashMap

  

此实现为基本操作(get和put)提供了恒定时间性能,假设散列函数在桶之间正确地分散元素。对集合视图的迭代需要与HashMap实例的“容量”(桶数)加上其大小(键值映射的数量)成比例的时间。

LinkedHashMap

  

与HashMap一样,它为基本操作(添加,包含和删除)提供了恒定时间性能,假设哈希函数在桶之间正确地分散元素。性能可能略低于HashMap,...

TreeMap

  

此实施为containsKeygetputremove操作提供了有保证的log(n)时间成本。

如果未提及某些方法,请尝试查找该特定方法。如果文档中没有提到运行时间,则可能与实现有关。