声明 list 的3种方式,ArrayList、Collection、List 的对比 ArrayList是实现了List接口的类而List 和 Collection 都是 Java集合框架中的接口。这三个声明之间有一些重要的区别ArrayList list new ArrayList();左边是具体实现类ArrayList✅ 能直接调用 ArrayList 所有方法❌ 写死实现类耦合高无泛型随便塞任何对象容易类型转换异常不推荐Collection list new ArrayList();左边是顶层父接口Collection✅ 最抽象❌ 只能用 Collection 里的方法拿不到 List 独有的 get(index)、add(下标 ,元素)几乎很少这么写List list new ArrayList();左边是List接口✅ 面向接口解耦可以用 List 全部方法get、按索引增删❌ 还是原始类型没有泛型类型不安全只是比上面两个规范一点✅标准最佳写法ListStringlistnewArrayList();左边List接口面向接口以后想换成 LinkedList 很方便右边new ArrayList()具体实现String泛型只能放String编译期就检查类型杜绝运行时强转报错ArrayList 换成 LinkedList 的步骤直接把右边new ArrayList()改成new LinkedList()就行左边不动原来ListStringlistnewArrayList();右边换成 LinkedList左边还是 ListListStringlistnewLinkedList();为什么左边不用改因为LinkedList同样实现了 List 接口所以变量类型依旧写List。你后面写的list.add()、list.get()、list.remove()这些 List 的方法全都不用改代码不用动。对比反面写法不推荐如果左边写死 ArrayListArrayListStringlistnewArrayList();以后想换 LinkedList左边类型也要一起改所有用到这个变量的地方都可能受影响耦合太高。