美文网首页
java面试ArrayList、LinkedList以及Vect

java面试ArrayList、LinkedList以及Vect

作者: pr0metheus | 来源:发表于2018-03-26 21:00 被阅读0次

    笔试题目一:问ArrayList、LinkedList以及Vector的区别?

    1. ArrayList底层实际是采用数组的方式实现的(并且该数组类型是Object类型)
    2. 如果是JDK6的话,ArrayList底层采用Arrays.copyOf方法来生成一个新的数组,如果是JDK5.0的话使用System.arraycopy方法
    3. List list = new ArrayList();底层会生成一个长度为10的数组来存放对象
    4. 知道ArrayList默认构造器底层调用的是ArrayList(10)是有必要的,当我们可以预见到一个数组将会存储多少个元素的时候,那么我们可以直接使用构造器ArrayList(int initialCapacity)而不是使用ArrayList的默认构造器,因为默认构造器底层是生成长度为10的数组,当容量无法满足的时候会用扩容手段(即生成一个新的数组容量为原先的1.5 + 1,并将旧数组元素存放到新数组中)因为要不断的生成新数组并且不断的拷贝元素,所以这会降低程序的效率,而这时候如果能估计出数组大致要存储的元素个数并使用ArrayList(int initialCapacity)构造器可以减少低效率的操作(不断生成新数组,不断进行元素拷贝)来提高程序的性能。
    5. ArrayList与vector的区别:对于ArrayList与Vector来说底层都是用数组方式来实现的(该数组是一个Object类型的数组),对于ArrayList来说所有方法都不是同步的,对于Vector大部分public的方法都是同步的。
    6. 对于同步不同步会产生两个问题?
    • 性能问题
    • 数据安全问题

    7 Vector采用同步机制也就意味着性能不太好,所以sun公司推出了ArrayList它不同步但效率高,供开发者根据具体场景来选用

    1. 对于ArrayList查找速度非常快,增加和删除操作非常慢。(本质上是由数组的特点来决定的)
    2. 对于LinkedList查找速度非常慢,增加和删除操作非常快。(本质上是由双向循环链表的特点来决定的)

    相关文章

      网友评论

          本文标题:java面试ArrayList、LinkedList以及Vect

          本文链接:https://www.haomeiwen.com/subject/ttzrcftx.html