当前位置: 首页 > news >正文

免费下载的网站信阳网络推广公司

免费下载的网站,信阳网络推广公司,seo诊断表,国外做建材的网站有哪些数据结构之常见的8种数据结构: -数组Array -链表 Linked List -堆 heap -栈 stack -队列 Queue -树 Tree -散列表 Hash -图 Graph 数据结构-链表篇 Linklist定义: -是一种线性表,并不会按线性的顺序存储数据,即逻辑上相邻…

数据结构之常见的8种数据结构:

-数组Array

-链表 Linked List

-堆 heap

-栈 stack

-队列 Queue

-树 Tree

-散列表 Hash

-图 Graph

数据结构-链表篇


Linklist定义:


-是一种线性表,并不会按线性的顺序存储数据,即逻辑上相邻,物理上不一定相邻的元素。通过指针域来寻找对应的元素。

Linklist优缺点:

优点:
-插入、删除速度快

-灵活分配结点空间

缺点:
-查询速度慢

通过Linklist常用方法来深入底层原理


-add(E e)

-add(int index, E element)

-remove(Obeject o)

-remove(int index)

-ListIterator正向遍历

-反向遍历

总结:


-插入、删除速度快是因为只要通过前后指针就能插入或者删除到链表中,不需要移动其它元素,插入头尾节点更快,因为Node结构体中保存了头尾指针。

-查询速度慢是因为,查询先通过右位移运算来判断对链表是前半部分遍历还是后半部分遍历,剩下的半部分遍历则是一个个节点遍历,头尾查询快,因为保存了头尾指针。
 

数据结构--数组篇

数组的定义:


-申请一块连续的内存空间来存储相同类型数据的集合

-数组存储的是对象的引用而非是对象本身

数组的优缺点:


优点:查询速度快(O(1)复杂度),因为它的存储是连续的内存空间,查找元素=首地址 + 每个元素所分配的空间*下标

从cpu的读取:cpu在读取数组的时候,可以借助缓存机制预读数组的数据,cpu在读取内存的时候会把一块连续的内存空间读入,当进行遍历时,直接命中。而链表是跳跃式的地址,在缓存中命中的概率低,就要跑到内存中去读取数据,缓存的速度远大于内存的读取速度。

缺点:插入 、删除速度慢,因为需要移动该元素后面的所有元素位置

数组的使用场景:


-适合查询多,插入、删除少的场景(整体上来说)

通过数组方法来深入底层原理


ArrayList方法中的常用方法
-add(E e)方法


流程图:


remove(int index)方法:

remove(Object o)方法

remove注意:remove(Object o)方法使用了2个对null跟非null分别使用了==跟equals做了等值比较,找到元素对应的索引位置后再删除与remove(int index)方法步骤基本一样

Iterator遍历方法

迭代注意:迭代过程中有2次的ConcurrentModification检验,一次是2个记录修改次参数expectedModCount = modCount等值校验。二次是 i >= elementData.length,并发过程中多次调用next方法。

Iterator的remove方法

关于System.arraycopy,Array.copyof区别:
-System.arraycopy(Object src, int srcPos, Object dest, int destPos,int length)

有5个参数

src :原数组

srcPos:原数组开始元素拷贝的索引位置

dest:目标数组

destPos:在目标数组的索引位置开始拷贝

length:拷贝的数组长度

-Arraycopyof 底层调用的也是Native方法的System.arraycopy


面试点提问:几种删除方式有什么区别


重点关注:expectedModCount = modCount;ConcurrentModificationException

for循环删除跟Iterator删除方式有什么不同?

Iterator方法:

正序for循环则直接调用remove(Object)或者remove(index)方法,修改了modCount++的值,但是并没有走checkForComodification()检验,该方法只针对了实现了Iterator<E>的类,想要正确删除元素请使用倒序删除

以上2个方法都可以直接删除元素不会报错,正序for循环不保证结果正确性

可以用foreach加强循环删除么?
a,foreach底层的实现原理就是通过Iterator迭代来实现的。所以会存在修改次数跟预期值修改值的比较判断。

b,而foreach循环在删除元素的时候走的是fastRemove()方法,


c,只增加了modCount++


d,并没有expectedModCount = modCount赋值语句,在下一次的循环就会报错


综上所述:使用Iterator跟for循环是可以成功删除元素的,foreach循环则不行。checkForComodification()检验,该方法只针对了实现了Iterator<E>的类,而Iterator跟foreach底层实现都是依赖这个接口。for循环则不依赖

注意上面的Demo只是说删除元素时会不会报错,并不是说上面几种方式都能正确删除完全,使用for循环保证正取删除元素可以使用倒序的方式,或者使用Iterator方式(推荐)。
 

http://www.mmbaike.com/news/89248.html

相关文章:

  • 临沂建设网站制作公司排行榜百度
  • html怎么做网站后台百度网站排名优化软件
  • 安庆做网站电话免费网站模板库
  • wix做中文网站怎么样淘宝搜索关键词技巧
  • 深圳做网站最口碑营销的作用
  • 免费跨境电商网站成人技术培训班有哪些种类
  • 赣榆网站建设四川二级站seo整站优化排名
  • 个人做网站费用适合中层管理的培训
  • 如何做淘外网站推广广告优化师
  • 个人兴趣网站设计西安网络推广seo0515
  • 视觉传达设计考研单页网站seo优化
  • 宣化网站制作公司营销策划书范文1000字
  • 具有品牌的广州做网站windows优化大师会员兑换码
  • 温州市手机网站制作多少钱全网推广系统
  • 资料网站怎么做的深圳网站建设微信开发
  • 前端用户中心 wordpress在线seo短视频
  • 长沙做网站建设的网络营销特点
  • 工商法律网站建设江北seo页面优化公司
  • 东莞市建设公共交易中心网站首页网络营销方式对比分析
  • 全屏背景网站草根seo视频大全网站
  • 网站建设公司 - 百度企业推广app
  • 网站内外链怎么做效果好优化营商环境条例心得体会
  • 有哪些网站可以做简历seo快速排名案例
  • 个人可以备案网站的内容高级seo招聘
  • 国家信息公示系统官网太原百度推广排名优化
  • 哪个网站可以做思维导图nba最新消息球员交易
  • 营销网站制作设计中文搜索引擎排行榜
  • 威县做网站哪里好昆明网络推广
  • 营销型网站工程seo3的空间构型
  • 做电商网站必需知道qcseo网站推广全程实例