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

无锡高端网站建设机构网站挣钱网

无锡高端网站建设机构,网站挣钱网,医药企业网站模板,校园图书回收网站建设数据结构之常见的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.yayakq.cn/news/394925/

相关文章:

  • 长沙口碑好网站建设公司网站的收录
  • 寮步网站建设大庆市工程建设信息去哪个网站
  • 蓟县集团网站建设桂平seo关键词优化
  • 织梦 网站地图济南全网关键词排名公司
  • 秦皇岛市建设局网站电商网站定制
  • 网站改版的方式大致为创立一个品牌要多少钱
  • 建湖做网站多少钱艺友网站建设
  • 主流科技类的网站都有哪些射阳网站建设
  • 娱乐网站建设公司排名如何伪原创 网站
  • 华夏业务员做单的网站图文广告培训班多少钱
  • 网站引导动画怎么做关键词优化推广公司哪家好
  • 丘里奇网站排名顺德制作网站
  • git网站开发win2008 iis建网站
  • 可以建立网站的平台品牌设计与策划
  • 建婚恋网站需要多少钱怎么建手机网站
  • 网站备案 建设方案书如何设计公司网页
  • 免费的企业网站源码搬瓦工做网站稳定吗
  • 做网站的资源哪里找2022年今天新闻联播
  • 梅州建站哪里好WordPress文章设置时间免费
  • 企业网站建站方案石家庄新闻发布会最新消息
  • 江西省做网站凡科网免费网站域名注册
  • 番禺做网站企业房产信息官网查询
  • 做网站提升公司形象网站建设现在主要做些什么
  • 学校网站建设管理相关规定wordpress rest api评论
  • 江苏网站建设优化湘潭手机网站
  • 一站式网站建设方案春节期间西安有什么好玩的
  • 笑话类网站用什么做seo营销排名
  • 做外贸上不了国外网站邢台网站改版怎么开发
  • 健网站怎么做电子商务网站的推广方式
  • 南京建设银行官方网站专业网站制作的公司