从Java的设计模式看接口和实现---List与ArrayList

例子:三个导包操作

java 复制代码
import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

如何区分

其中涉及到 Java 集合框架的接口(Interface)与实现(Implementation)设计模式。

简单来说:List 是"规则",而 ArrayList 是"具体做法"。

1. List 是接口(Interface)

你把它想象成一份"契约"。它定义了一个列表应该具有哪些行为,比如:

  • 必须能存取元素 (get, set)
  • 必须能添加元素 (add)
  • 必须能移除元素 (remove)

但 List 本身不能直接运行,因为它只是一个骨架,没有具体的实现逻辑。就像"交通工具"是接口,它规定了交通工具能行驶,但不能直接买一个叫"交通工具"的东西。

2. ArrayList 是类(Class)

它是 List 接口的一个具体的实现类 。它实现了 List 所定义的那些契约,并给出了具体的实现逻辑(比如内部怎么用数组扩容、怎么移动元素等)。

就像"汽车"就是"交通工具"的一种具体实现。

为什么都要导入?

  • 导入 java.util.List :是为了在声明变量时使用它(这是 Java 推荐的"面向接口编程"风格)。
    • 例如:List<String> list = new ArrayList<>();
    • 这样写的好处是:如果有一天你想把 ArrayList 换成另一种列表(比如 LinkedList),你只需要改右边的 new 部分,左边的 List 不需要改。
  • 导入 java.util.ArrayList :是因为你需要具体实例化它,即在代码运行时刻去调用 new ArrayList<>() 这个类来在内存中分配空间。

总结对照表

类/接口 角色 能否实例化(new) 用途
List 接口 不能 用于定义引用类型,提高代码灵活性
ArrayList 实现类 能 用于具体的对象创建,执行实际的逻辑

简单说,List 让你知道能干什么,ArrayList 帮你真正地把事情干成了。

至于 java.util.Arrays ,它是一个工具类 (Utility Class),它里面全是静态方法,专门用来辅助操作数组和集合(例如 Arrays.asList 或 Arrays.toString),它不代表"列表"本身。

希望这个解释能帮你理清它们在 Java 程序中的分工!

相关推荐
爱喝水的鱼丶34 分钟前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
w_zero_one1 小时前
算法--模拟
java·数据结构·算法
小灰灰搞电子1 小时前
Rust+Slint 实现FTP客户端调试助手源码分享
开发语言·后端·rust
外收内放1 小时前
面向对象高级(实战案例)
开发语言·python·学习
Javatutouhouduan1 小时前
阿里1658页Java面试题总结(含答案)
java·高并发·java面试·java面试题·后端开发·java程序员·java八股文
秋天的怀念_David1 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
专业程序开发源2 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
秋天的怀念_David2 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
thefool1122662 小时前
网络编程^
java
fanruitian2 小时前
python else用法
开发语言·python