最近在刷回溯算法时,遇见了List
LinkedList
很好奇的问题是:
1、List
2、List
3、LinkedList
第一个和第二个问题可以一起回答:
首先我们从ArrayList的定义来看,ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口
(List是一个接口,不能实例化,因此List
下图出自菜鸟教程runoob

其实在项目设计时,也有这类问题。例如service层会使用
Service service = new ServiceImpl();
在Service层我们定义了一些方法,然后在ServiceImpl中重写
这样的作用是什么呢?如果我需要使用一个新的 NewServiceImpl(),我只需要换成对应的实现类即可。这也就是多态性的由来,这种方式的好处是:
1.提高了代码的可维护性
2.提高了代码的扩展性
因为一个接口有多个实现类的话,就相当于将方法声明和方法实现解耦,方便维护代码
并且复用了接口,提高了代码的扩展性。
所以 List
并且顺带一提的是,ArrayList list=new ArrayList();这句话意思是创建一个ArrayList对象,它保留了其所有属性。
那么LinkedList
因为removeLast()方法是属于LinkedList类中的方法,前者的表达保留了所有方法,而后者其实本质上是List对象,没办法使用LinkedList类的独有方法。
那么我们会发现一个问题,我为什么要定义List
其实大多数时候ArrayList()独有的方法我们是用不到的,并且这样的写法也很好的解释了面向接口编程,除非要使用ArrayList()独有的方法,我们才会使用ArrayList list=new ArrayList()。