首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在实现集合及其顺序时使用的实际数据结构是什么?

在实现集合及其顺序时使用的实际数据结构是什么?
EN

Stack Overflow用户
提问于 2010-04-25 05:36:11
回答 5查看 4K关注 0票数 0

Java中使用了不同的集合,如hashtable、hashset、vector、treeset、treemap和hashmap。它们是如何在内部实现的?这些集合使用的实际数据结构是什么?那么,什么是秩序呢?

如果我们稍微讨论一下集合的实现,那就更好了。

EN

回答 5

Stack Overflow用户

发布于 2010-04-25 06:16:50

有一个内部调用Arrays.sort()的方法Collections.sort()。这使用合并排序来排序顺序为O(nlogn)的数据。还有一条信息是,如果要排序的元素数量小于7,则使用插入排序。

VectorArrayList一样,下面是复杂性,因为它使用了一个简单的数组

索引值get()- O(1) Object

  • (

)- pos,Object

  • )- O(n)

-O(N)

另一件事是,HashSet在内部使用HashMap,只关心映射的键和被忽略或未使用的对象,因此没有两种不同的实现。HashMap通过为每个对象生成唯一的散列码来使用无冲突散列或理想散列。因此,对于数据的插入和检索,顺序最好是1。

在Java Collections中,特别是在列表中,通常会对其两个具体实现ArrayListLinkedList进行比较。LinkedList的顺序如下。

对象get()- O(n)

(

  • )- O(1) (前提是在链接的list)
  • insertAt(int pos中维护现成的最后一个指针,对象值)- O(n)
  • remove(Object) -O(N)
票数 1
EN

Stack Overflow用户

发布于 2010-04-25 05:43:04

集合实现类完全按照它们的数据结构命名。因此,HashSet和HashMap使用散列作为底层数据结构,而TreeSet和TreeMap使用二叉树。

更多信息可在这些类的JavaDoc中找到。例如,对于TreeSet,它说明:

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

票数 0
EN

Stack Overflow用户

发布于 2010-04-25 05:55:10

关于订单,我发现了一些有用的东西:

我发现下面的帖子对于大O符号非常有用:Big-O summary for Java Collections Framework implementations?

准确地说,在下面的网页http://simplenotions.wordpress.com/2009/05/13/java-standard-data-structures-big-o-notation/

下面是每个集合http://java.sun.com/docs/books/performance/1st_edition/html/JPAlgorithms.fm.html上的实验结果的详细信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2706256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档