本文根据黑马程序员视频编写,为本人学习笔记,转载注明出处
黑马程序员视频地址https://www.bilibili.com/video/BV15b4y117RJ?
1 arraylist扩容机制
arrylist 是顺序线性表。而linkedlist则是链式线性表(每一个节点占两个内存,内存更大 因此我们在实际使用时一般是用arraylist。
jdk8版本之后:
通过无参构造
new arraylist();
这样构造出来的是占用内存大小是0
扩容规则
初始为0加入元素则变成10,之后变为1.5倍进行扩容。
小数向下取整
1.5的底层用的是 右移一位的思想(相当于除于2)再加上原来的数。
addAll方法扩容则是选择一步到位。
2 failfast&failsafe(迭代器运行机制
这两者是针对多线程情况下的迭代器运行机制
下图是他们的性质
1.arraylist是failfast,不允许他人修改
可以看到报了一个并发修改异常
2.copyonwriteArraylist则是failsafe允许修改
failsafe仍旧会使用原来的线性表
3 两者比较
见下图
从局部性原理来理解arraylist的优势