笔试题目一:问ArrayList、LinkedList以及Vector的区别?
- ArrayList底层实际是采用数组的方式实现的(并且该数组类型是Object类型)
- 如果是JDK6的话,ArrayList底层采用Arrays.copyOf方法来生成一个新的数组,如果是JDK5.0的话使用System.arraycopy方法
- List list = new ArrayList();底层会生成一个长度为10的数组来存放对象
- 知道ArrayList默认构造器底层调用的是ArrayList(10)是有必要的,当我们可以预见到一个数组将会存储多少个元素的时候,那么我们可以直接使用构造器ArrayList(int initialCapacity)而不是使用ArrayList的默认构造器,因为默认构造器底层是生成长度为10的数组,当容量无法满足的时候会用扩容手段(即生成一个新的数组容量为原先的1.5 + 1,并将旧数组元素存放到新数组中)因为要不断的生成新数组并且不断的拷贝元素,所以这会降低程序的效率,而这时候如果能估计出数组大致要存储的元素个数并使用ArrayList(int initialCapacity)构造器可以减少低效率的操作(不断生成新数组,不断进行元素拷贝)来提高程序的性能。
- ArrayList与vector的区别:对于ArrayList与Vector来说底层都是用数组方式来实现的(该数组是一个Object类型的数组),对于ArrayList来说所有方法都不是同步的,对于Vector大部分public的方法都是同步的。
- 对于同步不同步会产生两个问题?
- 性能问题
- 数据安全问题
7 Vector采用同步机制也就意味着性能不太好,所以sun公司推出了ArrayList它不同步但效率高,供开发者根据具体场景来选用
- 对于ArrayList查找速度非常快,增加和删除操作非常慢。(本质上是由数组的特点来决定的)
- 对于LinkedList查找速度非常慢,增加和删除操作非常快。(本质上是由双向循环链表的特点来决定的)