You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中LinkedList的不同声明方式及差异解析

LinkedList两种声明方式的区别与原理

首先明确:这两种写法创建的底层对象完全相同,都是LinkedList<Integer>的实例,在内存中属于同一类型的对象。

为什么两种写法都可行?

这是Java多态特性的体现:LinkedList类实现了List接口,根据多态规则,实现类的对象可以赋值给父接口类型的变量,因此List<Integer> list2 = new LinkedList<>()是合法的语法。

两者的核心差异

差异体现在变量的编译时类型限制:

  • LinkedList<Integer> list1:变量的编译时类型是LinkedList,因此可以直接调用LinkedList特有的方法,比如addFirst()、addLast()、removeFirst()、peekLast()等这些List接口未定义的方法。
  • List<Integer> list2:变量的编译时类型是List接口,只能调用List接口中声明的方法(比如add()、get()、remove()、size()等),即使实际对象是LinkedList,编译器也会限制你调用接口外的方法,除非显式将list2强制转换为LinkedList类型。

举个代码示例:

// list1可直接调用LinkedList专属方法
list1.addFirst(0);
list1.removeLast();

// list2直接调用会编译报错,必须强转
((LinkedList<Integer>)list2).addFirst(0);

哪种写法更推荐?

实际开发中更常用List<Integer> list2 = new LinkedList<>()的写法——这是面向接口编程的最佳实践。好处是:如果后续需要将列表实现类换成ArrayList,只需要修改new的部分(new ArrayList<>()),变量声明和所有调用List接口方法的代码都不需要改动,降低了代码耦合度,提升了灵活性。

内容的提问来源于stack exchange,提问作者Briar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:33:16