请问为什么我们在写java集合时总喜欢用接口回调?

我疑惑点有2个

1.你直接用ArrayList list=new ArrayList()不就可以了吗?
2.用List来实现接口回调的话 ,ArrayList里的一些方法你又用不了。
Map也是同样的疑惑

List list = new ArrayList();
这样的写法,是为了让后面的操作都是面向List接口的,而面向接口编程方便后期维护或扩展,因为List有三个子类:ArrayList、LinkedList、Vector,
若后期要考虑线程安全或提高增删元素速度等,就会考虑用其他实现类。这时只需要修改创建对象一个地方,而后面的代码基本不需要动。
如果明确用到某个现实类的特有方法就可以选择第二种写法了。