1.List接口概述
List接口特征:
1.数据存储可重复
2.有序,添加顺序和保存顺序一致
–| ArrayList 可变长数组
–| LinkedList 可变长数组
–| Vector 可变长数组
2.List常用方法
增:boolean add(E e);
List接口继承Collection接口,使用操作和Collection一致【尾插法】
boolean add(int index , E e);
List接口【特有方法】,在指定位置,添加指定元素
boolean addAll(Collection<? extends E> c);
List接口继承Collection接口 addAll方法,使用操作和Collection一致,采用的方式【尾插法】
boolean addAll(int index , Collection<? extends E> c);
List接口【特有方法】,在指定下标位置,添加另一个集合中所有内容
删:E remove(int index); List接口【特有方法】,获取指定下标位置的元素
boolean remove(Object obj); List接口Collection接口方法,删除集合中指定元素
boolean removeAll(Colleection<?> c); List接口继承Collection接口方法,删除当前集合中和参数集合重复元素
boolean retainAll(Colleection<?> c); List接口继承Collection接口方法,保留当前集合中和参数集合重复元素
clear(); List接口继承Collection接口方法,清空整个集合元素中的所有元素
改: E set(int index , E e); List接口【特有方法】,使用指定元素替代指定下标的元素,返回值是被替换的元素
查: int size(); List接口继承Collection接口方法,获取集合中有效元素个数
boolean isEmpty(); List接口继承Collection接口方法,判断当前集合是否为空
boolean contains(Object obj); List接口继承Collection接口方法,判断指定元素是否包含在当前集合中
boolean containsAll(Collection<?> c); List接口继承Collection接口方法, 判断参集合是不水当前集合在子集合
Object[] toArray(); List接口继承Collection接口方法,获取当前集合所有元素Object数组
E get(int index); List接口【特有方法】,获取指定下标对应的元素
List<E> subList(int fromIndex , int toIndex); List接口【特有方法】,获取当前集合指定子集合,从fromIndex 开始,到toIndex结束 fromIndex <= 范围 < toIndex
int indexOf(Object obj); List接口【特有方法】,获取指定元素在集合中第一次出现的位置
int lastindexOf(Object obj); List接口【特有方法】,获取指定元素在集合中最后一次出现的位置
3.ArrayList概述
ArrayLis是在Java中集合非常中的组成,基于数组完成的数据结构,可变长数组操作,底层保存数据是一个Object类型数组
ArrayLis使用的方法都是List接口中的方法,需了解的成员方法
ensureCapacity(); 判断方法,用于确定当前底层数组的容量是否满足当前操作的需求
trimToSize(); 节省空间,将底层数组的容量锁绒至有效元素个数
4.细节问题
DEFAULT_CAPACITY
默认容量 private static final int DEFAULT_CAPACITY = 10 ;
在调用ArrayList无参数构造方法时,才会使用DEFAULT_CAPACITY,作为底层Object数组的初始化容量,如果用户指定调用的是带有初始化底层Object数组容量的构造方法,会根据用户指定的容量创建成一个ArrayList集合
MAX_ARRAY_SIZE ==> Integer.MAX_VALUE - 8 ;
-8的原因:在数组中存在很多属性,length只是众多属性中的一个,在创建数组使用过程中,需要留有内存空间用于保存数组中属性
5.ArrayList特征:
增加慢:1.数组当前容量无法满足添加操作,需要进行扩容,存在数组创建,数组数据拷贝,浪费时间和内存。
2.数组在添加数据的过程中,存在在指定元素添加元素,从指定位置开始,之后的元素整体向后移动
删除慢:1.删除数据之后,从删除位置开始,之后的元素整体向前移动,移动过程浪费时间
2.删除操作会导致数组空间的浪费,内存浪费
查询快:ArrayList底层是一个数组结构,在查询操作的过程中,是按照数组+下标的方式来操作对应的元素,数组+下标方式可以直接获取对应的空间首地址,CPU访问效率高
6.内存地址
概念:计算机中为了更好的使用内存,操作程序,完后代码,将内存按照最小单位,进行编号处理。
最小单位:字节(byte)
从编号为0内存开始,到内存的最大值,地址以十六进制展示
7.内存地址和CPU的关系
CPU就是根据内存地址,可以直达内存所在区域,执行对应代码,速度快。
8.关于null的解释
null是计算机中非常特殊的内存,内存编号 0x0000 0000一般用于引用数据类型的初始化