码迷,mamicode.com
首页 > 其他好文 > 详细

表、栈和队列

时间:2019-03-31 15:24:12      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:它的   lis   pre   array   type   color   inf   缺陷   快速   

抽象数据类型(abstract data type, ADT)是带有一组操作的一些对象的集合。对于集合ADT, 可以有像添加(add)、删除(remove)以及包含(contain)这样一些操作。

 

ArrayList:插入和 删除的花费存在潜在开销。最坏的情况下,在位置0的插入,首先需要将整个数组后移一个位置以空出空间来,而删除第一个元素则需要将表中的所有元素前移一个位置,因此这两种操作最坏的情况是O(N)。

优势: 查询高效(可以直接find数组的index)

缺陷:插入删除开销大(需要将全部数组移位)

 技术图片

 

 

因此,为了避免插入和删除的线性开销,就引入了不连续存储,增删不需要整体移动的链表。

链表(LinkedList):链表由一系列节点组成,这些节点不必在内存中相连。每一个节点均含有表元素和包含该元素后继元的节点的链(Link)。称其为next链。最后一单元的next链引用null。

删除 (remove)方法可以通过修改一个next引用来实现。插入(insert)方法需要使用new操作符从系统取得一个新节点,再修改next引用。

优势: 查询效率低(需要从头开始遍历)

缺陷:插入删除高效(不需要全盘移位)

*删除最后一项比较复杂,因为必须找出指向最后节点的项,把它的next链改成null,然后在更新持有最后节点的链。

 

for循环和迭代器Iterator对比:

        采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快

        采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快

数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定元素.而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的.可以访问没有顺序的集合.

        而使用 Iterator 的好处在于可以使用相同方式去遍历集合中元素,而不用考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口),如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改,如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整,因为List有序,Set无序,结构不同,他们的访问算法也不一样.(还是说明了一点遍历和集合本身分离了)

 

表、栈和队列

标签:它的   lis   pre   array   type   color   inf   缺陷   快速   

原文地址:https://www.cnblogs.com/tangh4/p/10630964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!