ArrayList是一个线性表,同时ArrayList在储存空间上是连续的,因此也是一个顺序表.
1.
ArrayLIst的底层是一个数组来实现的,
但我们实例化它时,此时并没有为这个数组申请空间,只有在为其添加数据时才会为其开辟一个数组长度为10的数组;
此时我们调用其add()方法为其添加元素
add方法中右调用了其他的方法,我们来一一解释
这个方法 此时size表示当前的数据量,size+1表示的是如果添加当前数据的数据量
接着我们继续开这个方法的具体实现
不多说接着看(注意看方法名,容易混)
接下来就是为数组开辟空间的时候了
最后就是拷贝数组,上述中我不明白的是为什么最后先和MAX_ARRAY_VALUES比较,而不是直接和integer的最大值进行比较,希望大家指正.
2.
接下来看看ArrayList中的一些方法:
构造方法:
除了最开始的使用无参来实例,也可使用带参数的来实例,分别是使用一个装有指定类型或其子类的容器作为参数构建,还有指定数组一开始的容量,这里就不细看了,使用一下就好了:
打印结果如图,说明arrayLIst3把ArrayList1中的内容装进去了
除了构造方法还有一些普通的方法:
3.
Arralist的几种遍历的方式
1…使用for循环
2…使用for的加强版foreach
3…使用迭代器
到此为止我们来总结一下arraylist的优缺点:
优点:
1…是一个动态的数组,在数组增加或者减少的处理过程中很方便
2…可以随机访问元素
3…支持多线程
缺点
1…频繁的扩容,当数组需要扩容时,会创建一个新的数组,并且将原来的元素复制到新的数组当中,导致时间和空间的浪费
2…不适合在指定位置插入和删除数据,因为插入和删除的会涉及到大量的元素移动操作,导致效率低
3…线程不安全,如果多个线程同时对同一个arraylist进行操作可能导致数组的不一致性问题.
4…不能储存基本数据类型.