【问题标题】:What the difference List list = new ArrayList() and List list = new LinkedList() [duplicate]List list = new ArrayList() 和 List list = new LinkedList() 有什么区别 [重复]
【发布时间】:2019-03-15 10:50:32
【问题描述】:

我想到了一个问题: 有什么区别 1) 列表列表 = 新的 ArrayList()
2) 列表列表 = 新的 LinkedList() ? 不管我用上面两种方式初始化list,还是只能用List中的方法,不能用ArrayList或LinkedList,不是吗?

我从一个网站 (http://www.corejavaguru.com/blog/java/new-arraylist) 上读到,它说它被称为“编程到接口”,开发人员可以很容易地从 ArrayList 更改为 LinkedList,反之亦然。但是如果我按照上面所示的方式初始化,我就无法使用ArrayList/LinkedList的方法,即使改变初始化方式也很灵活。我相信是有原因的。希望能找到答案。

【问题讨论】:

  • 粗略的区别是你应该使用ArrayList,你不应该使用LinkedList。在我作为 Java 程序员的 20 年中,我做过一次后者,回想起来我很后悔。
  • @OleV.V.为什么不应该使用 LinkedList?
  • 我认为这个问题的措辞令人困惑,但我相信 OP 是在询问将变量类型声明为 List 而不是将变量类型声明为实际的具体实现类的原因,要么ArrayListLinkedList。所以我觉得这不会重复链接的问题。
  • 同意@Bobulous。标题具有误导性。
  • @IvanKaloyanov 如果您愿意,您可以,但您为什么要这样做?在性能无关紧要的 10 个案例中,有 9 个可以抛硬币。当它确实重要时,更喜欢ArrayList。我从未见过LinkedList 表现更好的案例,无论是时间还是空间。即使有时在中间进行插入和删除也不行。

标签: java list arraylist linked-list


【解决方案1】:

在这两种情况下,您都创建了一个名为 list 的变量,其类型为 List (Interface) 作为指针。

在第一种情况下: 列表列表 = 新的 ArrayList() 您使用类ArryaList 启动了list 变量,它是List interface 的一个实现,简而言之:

List 接口的 Resizable-array 实现

在第二种情况下: 列表列表 = 新的 LinkedList() 您使用类LinkedList 启动了list 变量,它是List interface 的实现,简而言之:

List 和 Deque 接口的双向链表实现

总之,在这两种情况下,您都会得到一个可以根据列表接口定义使用的列表。主要区别在于:

  1. 实现它在性能和内存使用方面有所不同
  2. 每个实现在使用时可能包含附加功能 在具体的实施环境中

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2017-05-08
    • 2014-01-03
    • 2015-07-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2012-04-08
    • 2013-08-22
    相关资源
    最近更新 更多