为什么创建List接口变量来使用ArrayList,而不是直接使用ArrayList?

1个回答

写回答

Leechun

2025-12-28 14:08

+ 关注

设计模式那些东西其实没那么重要,真正的原因是:能少敲几个字母,谁不愿意?虽然从概念上讲,List 是 ArrayList 的父类,理论上 ArrayList 能做的事情,List 不一定都能做。但实际上,两者的功能几乎完全一致,在绝大多数情况下,你可以毫无压力地把声明中的 ArrayList 替换为 List。这就又回到了我之前说的核心观点:能少写几个字母,为什么不?同样的道理也适用于其他场景,比如将 HashMap 定义为 Map 类型,或者将 ArrayDeque 定义为 Queue 或 Deque 类型,这些都遵循着一个原则——能简化就简化,何必多此一举?不过,也有一些例外需要注意。像 TreeSet 和 TreeMap 这些数据结构,你真的不能去掉它们前面的Tree前缀。为什么?因为在使用这些结构时,你往往需要用到 first、last、floor、ceiling 等方法,这些 API 可以帮助你快速查找集合中的最值或距离某个特定值最近的元素。如果去掉Tree前缀,这些功能就会彻底失效,只剩下有序迭代器还能勉强使用。所以,虽然简化代码是好事,但也得具体情况具体分析,不要盲目追求简短而忽略了实际需求。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号