如图第20行和第28行为什么得是ArrayList<>()

试了List<>()会报错,还有第二十行如果执行default那接下来会发生什么,还会赋值吗。 

 

1.List list = new ArrayList();
这样做的原因是list就相当于是一个泛型的实现,如果想改变list的类型,只需要:
List list = new LinkedList();//LinkedList也是List的实现类,也是ArrayList的兄弟类
这样,就不需要修改其它代码,这就是接口编程的优雅之处.

而List是一个接口,而ArrayList 是一个类,ArrayList 继承并实现了List。

 List list = new  ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。

此时它是一个List对象了,有些ArrayList有但是 List没有的属性和方法,它就不能再用了。

而ArrayList list=new  ArrayList();创建一对象则保留了ArrayList的所有属性。

总之接口new实现类。

2.Map.getOrDefault(Object key, V defaultValue)方法的作用是:
  当Map集合中有这个key时,就使用这个key值;
  如果没有就使用默认值defaultValue

也就是 如果根据你这个key去map中找如果找到了那就使用这个如果没有 就会使用你创建的defaultValue,相当于你如果有值我就取出来继续使用 如果没有值就创建一个使用

 

 第28行,如果换成list 会报错是因为你不能去new一个接口 ,你需要new一个list的实现类,或者new的时候实现这个接口。

第20行 使用default这个方法,是一个通过key获取值, 如果这个key存在就返回值,如果不存在会返回你第二个参数的默认值。

第20和第28行为什么不能new List<>,因为List是接口无法直接使用new关键字创建对象,所以如果想创建List集合的对象,可以使用它的子类,如ArrayList或者LinkedList。

getOrDefault方法的作用是,如果放入的key存在,则返回对应的ArrayList集合(集合中有之前存储的值),如果不存在,则直接创建一个新的ArrayList集合。

 

望采纳!!有任何问题,直接私信我!!