【问题标题】:ArrayList, LinkedList and Vector which one is the best for adding or removing the element from the listArrayList、LinkedList 和 Vector 哪一个最适合从列表中添加或删除元素
【发布时间】:2016-11-08 10:33:25
【问题描述】:

我参加了一次面试,面试官问我有关 ArrayList、Linked List 和 Vector 的问题。他的问题是
ArrayList, LinkedList, and Vector 都是 List 接口的实现。其中哪一个对于从列表中添加和删除元素最有效?我应该回答包括我可能知道的任何其他选择。
我回答了他,但他似乎对我的回答没有印象。
有人可以告诉我更多关于这方面的信息吗?
谢谢

【问题讨论】:

标签: java arraylist vector linked-list


【解决方案1】:
  • LinkedList 实现为双链表。它在 add 和 remove 上的性能比 Arraylist 好,但在 get 和 set 方法上更差。在这些情况下,您将不得不遍历列表直到某个点。所以,绝对不是LinkedList。

  • ArrayList 被实现为可调整大小的数组。随着更多元素添加到 ArrayList,其大小会动态增加。它的元素可以通过get和set方法直接访问,因为ArrayList本质上是一个数组。

  • Vector 与 ArrayList 类似,但它是同步的。

如果你的程序是线程安全的,ArrayList 是更好的选择。 Vector 和 ArrayList 在添加更多元素时需要更多空间。 Vector 每次都会使其数组大小翻倍,而 ArrayList 每次都会增长 50% 的大小。

LinkedList也实现了Queue接口,比ArrayList和Vector增加了更多的方法,比如offer()、peek()、poll()等。

很大程度上取决于您正在处理的需求类型。可以根据需要做出决定。

【讨论】:

    【解决方案2】:

    LinkedList 最适合添加/删除项目,原因是您只需更改项目之间的链接,而无需操作其他不相关的项目来完成当前操作。这也使得链表比其他容器更快。

    干杯!

    【讨论】:

      【解决方案3】:

      如果您要从列表中添加和删除大量数据,请选择 LinkedList,但如果您希望从列表中获取元素,请小心,这不是正确的数据结构。

      List<T> list = new LinkedList<T>();
      

      【讨论】:

        【解决方案4】:

        LinkedList 是使用双链表实现的,因为它的性能擅长从列表中添加/删除元素。 ArrayList 与 LinkedList 的性能: 时间复杂度对比如下: 获取():O(n) 添加():O(1) 删除():O(1)

        【讨论】:

          猜你喜欢
          • 2023-04-03
          • 2010-11-05
          • 2019-11-04
          • 2015-07-20
          • 1970-01-01
          • 2019-08-01
          • 2019-05-08
          • 1970-01-01
          相关资源
          最近更新 更多