其实这两中方式没必要刻意去区分。如果非要区分的话,各自都有适用的场合。如果写程序时,只涉及到了ArrayList一种集合,不涉及多态转型问题,可以直接ArrayList<T> list = new ArrayList<T>();
但还有另一种情况:比如有个之前定义的函数可以对List集合下的所有集合进行操作,为了提高扩展性,函数要求传入的参数类型肯定是List,那么可以用List引用接收List集合的所有实例对象(ArrayList, LinkedList, Vector),使用List<T> list = new ArrayList<T>()这种形式会比较好,增强阅读性,将向上转型体现的很明显,当然,使用ArrayList<T> list = new ArrayList<T>()也是完全可以的。
所以二者的区别就在于是否体现向上转型。作者: 张成龙 时间: 2012-5-7 09:59
List<T> list=new ArrayList<T>;更好一些,这样可以提高程序的扩展性,这就是面向父类或接口编程的优点作者: 隋营营 时间: 2012-5-7 10:13
最重要的区别就是:
List<T> list = new ArrayList<T> 方式更灵活,扩展性好:应用多态的机制,而多态正是JAVA核心的核心!
比如说,你想使用LinkedList代替ArrayList,只需要更改ArrayList即可。更好的方式是把要实例化的对象(ArrayList、LinkedList……)写在配置文件中,创建对象时从配置文件中读出,那就更完美了,代码都不用改动,直接修改配置文件就可以更换List的实现方式!作者: 周四川 时间: 2012-5-7 10:43
一般都使用 List list = new ArrayList() ,而不用 ArrayList alist = new ArrayList()
因为List有多个实现类,如 LinkedList或者Vector等等,现在你用的是ArrayList,也许哪一天你需要换成其它的实现类呢?,这时你只要改变这一行就行了:List list = new LinkedList(); 其它使用了list地方的代码根本不需要改动。假设你开始用 ArrayList alist = new ArrayList(), 这下你有的改了,特别是如果你使用了 ArrayList特有的方法和属性。 ,如果没有特别需求的话,最好使用List list = new LinkedList(); ,便于程序代码的重构. 这就是面向接口编程的好处作者: 廖理 时间: 2012-5-7 11:09
第一种List<T> list=new ArrayList<T>用通俗的说法第一种就是就是父类引用指向子类对象,
专业说法是向上转型,即子类对象转成父类对象,这样做的好处是,可以增强程序的扩展性。
如果以后升级要换另一种List容器,程序主体不用改变,只需将new ArrayList<T>改变即可,
例如:如果以后升级时要改成LinkedList是只需将List<T> list=new ArrayList<T>改变成List<T> list=new LinkedList<T>其他地方都不用改.
这就增强了程序的扩展性。
但是这样一来就不能调用ArrayList的特有方法。所以在应用时要结合具体需要来决定用哪种方式。
如果要就非常好的扩展性则用第一种方式List<T> list=new ArrayList<T>,
若要用到ArrayList的特有方法则用第二种ArrayList<T> list=new ArrayList<T>作者: 龚正军 时间: 2012-5-7 14:34 本帖最后由 龚正军 于 2012-5-7 14:35 编辑