码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • java 数据结构 ArrayList源码底层 LinkedList 底层源码 迭代器底层


    文章目录

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

    数据结构

    在这里插入图片描述
    对于数据结构我这边只告诉你右边框框里的
    在这里插入图片描述

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

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

    在这里插入图片描述


    在这里插入图片描述

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

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

    总结

    在这里插入图片描述

    ArrayList源码底层

    在这里插入图片描述

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

    如果一次添加多个元素,1.5倍放不下,则新创建数组的长度以实际为准
    在这里插入图片描述
    上图为添加一个元素的经过的流程

    在这里插入图片描述

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

    LinkedList

    在这里插入图片描述
    在这里插入图片描述
    独有api,了解即可,因为这些方法,Collectoin都可以实现

    底层源码

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

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


    在这里插入图片描述

    空参构造创建完对象就是上图的样子
    在这里插入图片描述

    添加了一个结点

    在这里插入图片描述

    添加第二个元素的操作
    在这里插入图片描述
    添加第三个.元素添加完毕

    迭代器底层

    在这里插入图片描述

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

    在这里插入图片描述

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


    在这里插入图片描述
    上面源码就是为什么使用集合的方法太你家删除元素会报错的原因.因为modCount在使用add或者remove会自增 最后他会拿着一开始modCount的值跟最新变化次数作比较 如果不一样就会报错

  • 相关阅读:
    boost-asio-1-定时器使用
    gRPC集成protoc-gen-validate
    【MAPBOX基础功能】04、底图加载 - mapbox通过style方式配置其它的底图服务
    XXL-Job分布式任务调度框架-单机模式和分片模式执行任务4
    Android控件全解手册 - 图片优化篇
    【译】发布 .NET Aspire 预览版 2(一)
    34 机器学习(二):数据准备|knn
    详解【计算机类&面试真题】军队文职考试——第6期:何为虚拟局域网VLAN?| 交换机和路由器的区别 | 自适应网卡只有红灯闪烁,而绿灯不亮,这种情况正常吗?| 附:Python实现HTTP请求
    存储器概述
    2022人工智能数学基础1-2(许志钦
  • 原文地址:https://blog.csdn.net/nie2459010516/article/details/134184231
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号