最近开始准备找实习了,第二次面试献给了百度,百度面的都是一些细致的知识点和基本的算法,看你的基本功是否扎实,才发现自己学的很不牢固。
#ArrayList的使用方法
面试百度的时候被问到了java中的常用的几种数据结构,我提到了ArrayList、hashset、hashmap、linkedlist。面试官提到了ArrayList内部实现的原理。当时答的是一直把ArrayList当作一个动态数组来使用,并不清楚其内部的实现原理。
这里总结一下ArrayList的内部实现原理
1、什么是ArrayList
ArrayList就是传说中的动态数组,它提供了如下一些好处:
1.动态的增加和减少元素
2.实现了ICollection和IList接口
3.灵活的设置数组的大小
#着重说一下ArrayList最佳使用建议
(1)ArrayList内部封装了一个Object类型的数组,对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作
(2)数组扩容
这是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。