首页 > 编程语言 >ArrayList的源码分析(二)

ArrayList的源码分析(二)

时间:2022-11-30 15:33:29浏览次数:39  
标签:分析 index 下标 删除 ArrayList 源码 数组 集合 方法


上篇文章给大家介绍了arraylist集合源码的一些属性和扩容方式add方法,接下来再和大家来聊聊这个集合的一些源码

首先看看remove的方法,这个方法有两个,一个是根据下标删除对象,一个是根据对象删除

rangeCheck(index);是一个判断index参数的规范的,如果太长或者为负数则出现异常, 

modCount这个属性则是集合被修改的次数, 一个该集合的泛型变量接收到当前参数位置的对象,将当前集合长度减去方法的参数再减一, 这就是判断当前这个参数所代表的这个对象是否在当前集合中,判断如果在的话也就是 数字大于0, copy数组,对于这个System.arraycopy的方法我解释下:

System.arraycopy(​​Object​​ src, int srcPos, ​​Object​​ dest, int destPos, int length);  

  • 参数
  • ​src​​ - 源数组。
  • ​srcPos​​ - 源数组中的起始位置。
  • ​dest​​ - 目标数组。
  • ​destPos​​ - 目的地数据中的起始位置。
  • ​length​​​ - 要复制的数组元素的数量。
    这样复制的数组的销量是最快的.    这样copy之后就想到于当当原数组的index位置的下标+1开始向前移动,index下标位置被后面的代替,而数组的最后的两位将变得一致,不懂的可以自己测试一下这个方法,而 后面那个[--size]=null就是将最后面一位设置为null,这样就完成了按照下标删除的操作

接下来是按照集合中的对象去删除

这个东西就很好理解了,参数如果等于null的话就去整个数组里面找为null的然后删除,else中是通过equals方法去整个数组中去查找该对象,然后删除,这里用到了  fastRemove这个方法,我们来看看

ArrayList的源码分析(二)_数据

是不是感觉这个方法很 眼熟,这不就是根据下标删除吗?没错,当它拿到你需要删除的对象的下标之后依然根据这个下标删除就行了

ArrayList的源码分析(二)_泛型_02

ArrayList的get方法就没什么好讲的了,因为当你知道了它的底层是数组的时候get下标拿到对象那不是很简单就能实现的吗

 

标签:分析,index,下标,删除,ArrayList,源码,数组,集合,方法
From: https://blog.51cto.com/u_15897407/5899834

相关文章

  • Mybatis源码分析(十五) - 缓存技术
    MyBatis包含一个非常强大的查询缓存特性,使用缓存可以使应用更快地获取数据,避免频繁的数据库交互 缓存查询图: 一级缓存(也叫应用缓存)一级缓存默认会启用,想要关闭一级缓存......
  • Mybatis源码分析(十三) - 关联查询之多对多
    我的理解是,多对多其实就是两个一对多。嵌套结果:示例代码:<selectid="selectUserRole"resultMap="userRoleInfo">selecta.id,a.user_name,a.real......
  • Mybatis源码分析(十四) - discriminator 鉴别器映射
    在特定的情况下使用不同的pojo进行关联,鉴别器元素就是被设计来处理这个情况的。鉴别器非常容易理解,因为它的表现很像Java语言中的switch语句discriminator标签常用的......
  • Mybatis源码分析(十七) - 源码包分析【日志模块】
    mybatis源码下载地址:​​https://github.com/mybatis/mybatis-3​​MyBatis源码导入过程:下载MyBatis的源码检查maven的版本,必须是3.25以上,建议使用maven的最新版本mybatis的......
  • Mybatis源码分析(二十一) - 核心流程分析
    mybatis核心流程三大阶段初始化阶段读取XML配置文件和注解中的配置信息,创建配置对象,并完成各个模块的初始化的工作代理阶段封装iBatis的编程模型,使用mapper接口开发的初始化......
  • Tomcat之tomcat架构分析
    Tomcat的目录结构 bin执行目录sh文件liux上的,bat文件windows上的confcatalina.policy 权限相关Permission,Tomcat是跑在jvm上的,所以有些默认的权限server.xml: Server节......
  • windows下编译调试 Elasticsearch 8.7.0 源码
    最近想从代码层面学习下ElasticSearch,于是下载代码并导入到idea中,开始一顿操作,gradle各种倒腾,还是没法直接从代码运行进程,最后选择了一种不那么直接的debug方法,远程......
  • Spring 框架的设计理念与设计模式分析
     ​​https://github.com/javahongxi​​Spring作为现在最优秀的框架之一,已被广泛的使用并有很多文章分析它。本文将从另外一个视角试图剖析出Spring框架的作者设计Spring......
  • tomcat源码分析-http请求在Container中的执行路线
     在CoyoteAdapter的service方法中,主要干了2件事:  1.org.apache.coyote.Request->org.apache.catalina.connector.RequestextendsHttpServletRequest     ......
  • easylogging++的那些事(四)源码分析(二)日志记录宏(四)VERBOSE日志宏
    目录CVLOG宏宏展开源码剖析CVLOG_EVERY_N宏宏展开源码剖析CVLOG_AFTER_N宏宏展开源码剖析CVLOG_N_TIMES宏宏展开源码剖析VLOG宏DCVLOG宏DVLOG宏VLOG_EVERY_N宏VLOG......