从ArrayList源码对其原理总结:
1.集合与数组的区别
- 数组效率高,而集合是基于数组的,底层是数组;
- 数组功能单一:创建后大小固定,只能存一种数据类型,而集合扩展了数组的功能:可以自动扩容,可以存多种数据类型;
2.ArrayList属性
①DEFAULT_CAPACITY :int 默认容量大小为10;
②EMPTY_ELEMENTDATA : Object[] 值={},为空数组的实例;
③DEFAULTCAPACITY_EMPTY_ELEMENTDATA : Object[] 值={},默认大小的为空数组的实例;
④size : int 私有属性,表示集合大小,与size()方法不同,我们通常使用size()方法;
⑤MAX_ARRAY_SIZE : int 值= 2^31-1-8 ,最大数组分配值(2^31-1是int最大值)
⑥elementData : Object[] 存储数组;
⑦其他继承属性:modCount:修改的次数
3.ArrayList方法
- size()方法获取大小;
- public boolean contains(Object o)方法
①如果o为null,循环数组中是否有null,是返回下标,否则返回-1,最后与0比较大小返回boolean;
②如果o不为null,循环数组中是否存在该对象;
使用equals方法判断(父类引用子类对象, 会调用子类的equals方法,如果子类未重写equals方法,则默认object中的方法,只比较对象的引用,即=),
相等则返回下标,否则返回-1,最后与0比较大小返回boolean;
- 。。。
4.使用场景