集合中元素的删除元素要左移,集合中元素添加集合长度要扩充并且元素要右移
集合的层次关系
Collection (子集和 List和Set)
List:有序可重复
ArrayList
LinkedList
Vector
Set:无序不可重复(无序是和输入的顺序无关,默认顺序是从小到大) HashSet
TreeSet
查询快, 增删慢的原理:
查询快:
ArrayList底层维护是一个Object类型的数组,可以完成使用数组的下标机制来访问数据,这种访问形式是非常快的
增加慢:
是因为在添加数据的时候,有可能导致ArrayList底层的Object数组的元素个数不够用,那么会调用数组的扩容方法 grow,而扩容方法,是创建了一个新的数组,数组的元素个数大于是老数组的1.5倍,这里会利用一些方法,把老数组里面的元素完完整整的拷贝的到新数组,这个拷贝过程很占用时间和内存
删除慢:
因为删除某一个元素,会导致数组中该元素之后的数据,做一个整体的左移,这里也是一个数组的拷贝过程,整个过程非常浪费时间
面试题:
1.如果调用了ArrayList的无参构造方法,那么请问底层维护的Object数组默认的元素个数是多少?如果是调用这个方法呢newArrayList(8);答:默认元素个数为10,如果调用了newArrayList(8)Object数组,元素个数为8
2.ArrayList是一个可以自增长的空间,请问,增长的原理是什么?增长的长度是多少?ArrayList底层维护的是一个Object数组,默认元素为10,如果添加元素时,当前需求的元素空间超出了Object数组的元素个数,会调用底层的grow,进行数组元素的扩容和拷贝扩容量是大约1.5倍
新元素个数 = 老元素个数 + (老元素个数 >>1);newCapacity = oldCapacity + (olcCapacity >>1);
网友评论