java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层

这篇具有很好参考价值的文章主要介绍了java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据结构

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言
对于数据结构我这边只告诉你右边框框里的
java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

栈的特点:后进先出,先进后出,入栈也成为压栈,出栈也成为弹栈
栈就像一个弹夹

队列先进先出后进后出
队列像排队

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言


java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

链表查询满 但是增删快(相对于数组而言)

拓展:还有一个双向链表 他在查询元素的时候更快些,因为他在拿到一个元素后先判断离头结点近一点还是尾结点

总结

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

ArrayList源码底层

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

ArrayList用空参构造创建对象.在底层创建一个默认长度为0的数组elementData(数组名) 然后有一个size指向元素
添加第一个元素的时候,底层才会创建一个新的长度为10的1数组`
数组存满的时候回添加一个新数组 新数组是老数组长度的1.5倍 并且会把老数组的内容拷贝过去
size有两个含义:一个是集合长度 一个当他完成存储他会指向下次存入的位置

如果一次添加多个元素,1.5倍放不下,则新创建数组的长度以实际为准
java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言
上图为添加一个元素的经过的流程

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

上图为长度为10的数组装满如何扩容
minGrowth是至少要增加的容量
prefGrowth是默认新增容量的大小.就是老容量的1.5倍

LinkedList

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言
java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言
独有api,了解即可,因为这些方法,Collectoin都可以实现

底层源码

LinkedList底层是一个双向链表所以他有
空参构造的成员位置有size和first last 头结点为节点.当掉用空参构造就会自动生成这些

node有三个成员变量
item现在要存储的数据
next 下一个结点要记录的地址值
prev我要记录前一个结点的地址值


java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

空参构造创建完对象就是上图的样子
java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

添加了一个结点

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

添加第二个元素的操作
java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言
添加第三个.元素添加完毕

迭代器底层

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

获取迭代器对象后相当于创建自己内部类对象(Itr)
内部类有三个成员变量
cursor指针默认初始化0
lasRet刚刚操作索引的位置

java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言

hasNext判断原理
指针跟size比较直到指针为3


java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层,java,数据结构,开发语言
上面源码就是为什么使用集合的方法太你家删除元素会报错的原因.因为modCount在使用add或者remove会自增 最后他会拿着一开始modCount的值跟最新变化次数作比较 如果不一样就会报错文章来源地址https://www.toymoban.com/news/detail-745172.html

到了这里,关于java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 【数据结构】 LinkedList【神装】

      登神长阶 第二神装    LinkedList   目录 🕶️一.LinkedList 🥼1.简介  🦺2.LinkedList具体使用 👔2.1.构造方法 👕2.2.常见操作 👘2.3.遍历 🧢三.LinkedList的优缺点 与ArrayList的比较 🪖四.总结与反思 在集合框架中,LinkedList是一个普通的类,实现了List接口,具体框架图如下: 说明

    2024年04月14日
    浏览(30)
  • Java 中数据结构LinkedList的用法

    链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。 链表可分为单向链表和双向链表。 一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。 一个双向链表有三个整

    2024年02月11日
    浏览(29)
  • 【数据结构与算法】4、双向链表(学习 jdk 的 LinkedList 部分源码)

    🎁 单链表的节点中只有一个 next 指针引用着下一个节点的地址 🎁 当要获取单链表中的最后一个元素的时候,需要从头节点开始遍历到最后 🎁 单链表一开始的时候有 first 头指针引用着头节点的地址 💰 双向链表可以提升链表的综合性能 💰 双向链表的节点中有 prev 指针引

    2024年02月12日
    浏览(34)
  • ArrayList 底层结构和源码分析

    ArrayList 实现了 List 接口。它可以存储包括 null 的任何类型的对象,允许重复元素。 ArrayList 在内部使用一个数组来存储元素,当元素数量超过数组容量时, ArrayList 会自动重新分配更大的内部数组,并且将现有元素复制到新数组中。 ArrayList 基本等同于 Vector ,但是 ArrayList 是

    2024年02月08日
    浏览(26)
  • ArrayList底层结构和源码分析

    1.permits all elements, including null,ArrayList 可以加入null,并且多个 2.ArrayList是由数组来实现数据存储的 3.ArrayList 基本等同于Vector,除了ArrayList是线程不安全(执行效率高)看源码.在多线程情况下,不建议使用ArrayList 代码演示: ArrayList的底层操作机制源码分析 (重点,难点.) 1.Arra

    2023年04月24日
    浏览(45)
  • ArrayList 底层结构及源码分析

    ArrayList 实现了 List 接口。它可以存储包括 null 的任何类型的对象,允许重复元素。 ArrayList 在内部使用一个数组来存储元素,当元素数量超过数组容量时, ArrayList 会自动重新分配更大的内部数组,并且将现有元素复制到新数组中。 ArrayList 基本等同于 Vector ,但是 ArrayList 是

    2024年02月08日
    浏览(32)
  • 数据结构(Java实现)LinkedList与链表(下)

    ** ** 结论 让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。 LinkedList的模拟实现 单个节点的实现 尾插 运行结果如下: 也可以暴力使用 全部代码 MyLinkedList IndexOut

    2024年02月11日
    浏览(34)
  • 数据结构(Java实现)LinkedList与链表(上)

    链表 逻辑结构 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。 无头双向链表:在Java的集合框架库中LinkedList底层实现就是无头双向循环链表。 链表的实现 创建一个链表 遍历单链表 、 得到

    2024年02月11日
    浏览(39)
  • [JAVA数据结构]顺序表ArrayList

    目录 1.线性表 2.顺序表 3.ArrayList简介 4.ArrayList的使用  4.1ArrayList的构造方法 4.2ArrayList的常用操作 4.3ArrayList的遍历方法 4.4ArrayList的扩容机制 5.ArrayList的具体运用 ArrayList是一种基于数组的数据结构,是线性表的一种,也是顺序表。 通俗来说,线性表是一种线性结构,在逻辑上

    2023年04月26日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包