Java 中 List 和 ArrayList 的区别
  • List 是一个接口,而 ArrayList 是 List 接口的一个实现类
  • ArrayList 类继承并实现了 List 接口

因此,List 接口不能创建实例对象,但是可以为 List 接口创建一个指向自己的对象引用。而 ArrayList 实现类的实例对象就在这充当指向 List 接口的对象引用。

List<String> list = new ArrayList<>();
 

这体现了面向对象的多态性

List list = new List();//报错
List list = new ArrayList();//正确
	ArrayList arrayList = new ArrayList();
	list.trimToSize();//错误,没有该方法
	arrayList.trimToSize();//正确,ArrayList里有该方法
 

它就是一个 List 对象,而有些 ArrayList 类具有的,但是 List 接口没有的属性和方法,就不能再用了。 而 ArrayList list=new ArrayList();

创建对象则保留了 ArrayList 的所有属性和方法。

问题的关键:为什么要用 List list = new ArrayList(), 而不用 ArrayList alist = new ArrayList() 呢?
  • 问题就在于 List 接口有多个实现类,现在你用的是 ArrayList,也许哪一天你需要换成其它的实现类,如 LinkedList 或者 Vector 等等,这时你只要改变这一行就行了: List list = new LinkedList(); 其它使用了 list 地方的代码根本不需要改动。

  • 假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList 实现类特有的方法和属性。

  • 这样的好处是为了代码的可维护性,可复用性,可扩展性以及灵活性,再者就是这符合了里氏代换原则和开闭原则。