在java.util中的Collection接口有子接口List,List有其实现ArrayList类。那么Collection<E> a = new ArrayList<E>();和List<E> a = new ArrayList<E>();的区别是什么呢?

解决方案 »

  1.   

    申明引用的类型不一样,实际对象类型是一样的。
    区别就是,第一个把ArrayList当作Collection来使用,第二个把ArrayList当作List来使用。
      

  2.   

    两者都有的方法,用起来效果一样(即,具体实现都是ArrayList),区别在于:声明成前者,就不能使用add(int index, E element) ;addAll(int index, Collection<? extends E> c) 等List中定义了的,而Collection中没有定义的方法了。
      

  3.   

    JAVA的多态,父类引用指向子类对象。
    好处?简单的说:
    Collection<E> a = new ArrayList<E>();可以把后面的ArrayList变为LinkList或HashSet
    而这行代码以下的代码都不需要修改。如果逻辑发生了变化,想要存不重复的对象就换成HashSet,如果你查询比较频繁那就换成LinkedList。而之后的代码都不用变化。
    如果是List放前面,那就只能用实现List接口的类。其它的好处多写代码才可以体会。只可意会不可言传总的来说灵活一点就是了。