三顾ArrayList
ArrayList部分一共五篇文章了,并且引入了时间复杂度来分析,强烈建议大家一定要按顺序阅读,相关文章分别是:
1、《ArrayList初始化 - Java那些事儿》
2、《ArrayList底层数组扩容原理 - Java那些事儿》
3、《时间复杂度 - Java那些事儿专栏》
4、本文
第三次强调,ArrayLIst是一个普通的类。
好,现在我们来讨论一下数组的删除,我们知道数组一但在堆内存中创建出来,数组长度是不可变的,看以下源码:
添加10个用户
比如我们要把“周八”这个人从数组中删除,如图:
我们只能循环数组,找到“周八“的下标5,由于数组没有提供删除方法,我们只能把下标为5的位置赋值为null(造成了数组空洞),“周八”这个Person对象已经没有引用指向它了,JVM的垃圾回收机制会在适当的时候回收它。但数组的长度还是10。下次当我们再循环查找某人时,稍不注意就会报空指针异常,虽然我们可以写非空去判断,但还是不太友好,我们把null后面的所有元素引用复制一下,往前拷贝一份,把null
三顾ArrayList最先出现在Python成神之路。
共有 0 条评论