192.168.1.41_20200910-方栋泽

一、问题

简述 ArrayList 、Vector 、LinkedList 的区别

相同

  • 都是 java.util.List 接口的实现类
  • 都是有序、可排序、可重复的集合
  • 都支持迭代器操作

区别

  • 实现接口不同

    • ArrayList 和 Vector 未实现 Queue 接口、Deque 接口,不支持队列操作
    • LinkedList 实现了 Queue 接口 和 Deque 接口,支持队列操作,同时支持栈操作
    • 自己翻看API查看 Queue 、Deque 接口中声明的方法
    • 自己翻看API查看 LinkedList 中对栈操作的支持
  • 内部实现不同

    • ArrayList 内部采用数组来存储元素
    • Vector 内部采用数组来存储元素
    • LinkedList 内部采用 链表 来存储元素
  • 线程安全

    • ArrayList 非线程安全,适用于单线程环境
    • Vector 线程安全,适用于多线程环境
    • LinkedList 非线程安全,适用于单线程环境
  • 扩容方式不同

    • ArrayList 内部采用 倍数增长 的方式扩容
    • Vector 内部采用 增加固定增量 的方式扩容
    • LinkedList 内部采用链表实现,不需要扩容
  • 增删效率不同

    • ArrayList 和 Vector 内部采用数组实现,因此增删慢
    • LinkedList 内部采用链表实现,因此增删块
  • 是否支持随机访问

    • ArrayList 和 Vector 内部采用数组实现,因此随机访问效率较高
    • LinkedList 内部采用链表实现,因此随机访问效率较低

二、吐槽

今天学了链表,感觉比较绕,虽然比较难理解但是感觉挺有意思的;老师说明天就要讲数据库了,不知道上次说的垃圾回收和精确计算讲不讲