使用
Collection param = new ArrayList();
还是:
List param = new ArrayList();有什么区别吗?

解决方案 »

  1.   

    public interface List<E>  extends Collection<E>List 继承了 Coolection
      

  2.   

    Collection param = new ArrayList();
    List param = new ArrayList();
    param出自于不同的接口,它里面的方法不同
      

  3.   


    Collection param = new ArrayList();
    还是:
    List param = new ArrayList();有什么区别吗?实现上没区别,你还能写成OBJECT param = new ArrayList();
    对于良好得编程习惯一般都写成List param = new ArrayList(); 把范围搞得太大就没意思了
      

  4.   

    我还是习惯ArrayList list = new ArrayList(),难道用List list = new ArrayList()就好么?
      

  5.   

    List param = new ArrayList();
      

  6.   

    我一般都是ArrayList list = new ArrayList();
      

  7.   

    List list = new ArrayList();
      

  8.   

    将一个对象向上转型为父类类型或接口类型,意味着你只能对该对象调用父类或接口中定义的方法。List和Collection都是接口,但List继承自(或者更应该叫扩展自)Collection,自然比Collection定义的方法多得多。具体哪些差别,可以自己去查JAVADOC。比如一个很明显的问题就是:用Collection接口的话,那么你只能add(),不能get(),因为Collection中没有定义get()方法。另外一个很明显的区别是:List能返回一个更加有用的迭代器ListIterator,而Collection只能返回普通迭代器。一般来说,向上转型的作用是限制对象的行为与接口保持一致,所以如果你要你的对象的行为和Collection保持一致,就转型为Collection,要和List保持一致,就转型为List。这是灵活性和功能性的一个权衡。通常转型为Collection并不是十分必要,因为Collection提供的接口实在太有限了。
      

  9.   

    楼上说的很好,我学习到了不少东西.
    我刚学没多久,只是发表自己的一点儿小心得.
    我认为,在定义函数的参数是可以这样用
    private void ss(Collection col){
    .
    .
    .
    }然后你在调用这个函数的时候可以,参数可以传Collection子类类型的变量,例如:
    ArrayList ary =new ArrayList();
    ss(ary)
    这样做也是可以的。
      

  10.   

    一般来说范围定义地越广越好,除非你需要使用到更高子类的功能,
    譬如如果你需要使用到Collection的功能,那你当然不能把范围定义在
    Object,如果你不需要使用到List的功能,我的建议是Collection
      

  11.   

    当然是List了,Set也属于collection的,没必要用collection