ArrayList源码解析和设计思路
程序员文章站
2022-05-06 08:48:54
...
transient Object[] elementData; // non-private to simplify nested class access
- ArrayList无参构造器初始化时,默认大小是空数组,第一次add的时候扩容的数值是10
初始化
三种初始化方式:无参初始化、指定大小初始化、指定初始数据初始化
新增和扩容
扩容本质
删除
迭代器
- hasNext 还是否可以迭代 当cursor的值等于长度值的时候,说明到最后了
- next 检验能不能继续迭代、找到迭代的值,并为下一次迭代做准备
- remove lastRet=-1防止重复删除 删除之后expectedModCount需要修改
时间复杂度
新增和删除时间复杂度都为O(1)
线程安全
推荐用Collections#synchronizedList来保证线程安全
推荐阅读
-
Spring MVC源码(三) ----- @RequestBody和@ResponseBody原理解析
-
解析品牌设计流程和品牌设计背后的故事
-
ArrayList源码和多线程安全问题分析
-
Laravel源码解析之路由的使用和示例详解
-
Mybaits 源码解析 (十一)----- 设计模式精妙使用:静态代理和动态代理结合使用:@MapperScan将Mapper接口生成代理注入到Spring
-
Mybaits 源码解析 (十二)----- Mybatis的事务如何被Spring管理?Mybatis和Spring事务中用的Connection是同一个吗?
-
netty源码解解析(4.0)-23 ByteBuf内存管理:分配和释放
-
Mybaits 源码解析 (九)----- 全网最详细,没有之一:一级缓存和二级缓存源码分析
-
asp.net abp模块化开发之通用树2:设计思路及源码解析
-
电商店铺首页设计思路和过程经验分享