Java-ArrayList初始化的方式区别

qq_37806415 2017-11-06 09:21:18
直接正文:
ArrayList<Object> xxx = new ArrayList<>();
List<Object> xxx = new ArrayList<>();

虽然看得出是多态,但不理解为什么要用List做引用,ArrayList有List 的方法了还要多态,求解释
...全文
780 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
偏安zzcoder 2017-11-07
  • 打赏
  • 举报
回复
刚看到还以为你说额是new ArrayList<>(30)和new ArrayList<>()的区别呢
青年卫大师 2017-11-07
  • 打赏
  • 举报
回复
ArrayList 是LIst 接口的一个实现 引用通常使用接口
qq_37806415 2017-11-06
  • 打赏
  • 举报
回复
引用 1 楼 Bonsour的回复:
从上面的写法来看,这只不过是一个书写的习惯而已,两者的结果是相等的。 但是从一些其他的角度来看,使用List做引用,有很多好处。 如果你知道依赖倒置原则,这个问题自然就不是问题了。 如果你不知道,举几个例子: List<Integer> list; for(int i = 0;i<100;i++){ if(i%2==0){ if(list == null){ list = new ArrayList(); } list.add(i); } else { if(list == null) { list = new LinkedList(); } list.add(i); } } 就是说,有些时候,可能需要的不仅仅是ArrayList,需要根据某些类型来判定究竟需要哪种类型。所以,使用List就可以随便指定要创建什么类型的对象了。 另一个例子: public void fun(List<Integer> list) { list.get(0); } 相对这个例子而言,它可以动态的指定调用方要传入什么样的类型。如果你当前的版本需要ArrayList,则需要传入ArrayList,假如在后期发现,LinkedList更合适,你只需要改调用方就可以了,而不需要再来改这儿的代码。所以,它比直接使用ArrayList更方便。 嗯。。大概就这样吧。你上面的那种写法,只是习惯问题,没有哪种好与不好。
额,我的锅,手机版本的csdn优化不好,你打的文字显示不全,现在看到完整的了,有大帮助,明早起来给你结贴
qq_37806415 2017-11-06
  • 打赏
  • 举报
回复
引用 1 楼 Bonsour的回复:
从上面的写法来看,这只不过是一个书写的习惯而已,两者的结果是相等的。 但是从一些其他的角度来看,使用List做引用,有很多好处。 如果你知道依赖倒置原则,这个问题自然就不是问题了。 如果你不知道,举几个例子: List<Integer> list; for(int i = 0;i<100;i++){ if(i%2==0){ if(list == null){ list = new ArrayList(); } list.add(i); } else { if(list == null) { list = new LinkedList(); } list.add(i); } } 就是说,有些时候,可能需要的不仅仅是ArrayList,需要根据某些类型来判定究竟需要哪种类型。所以,使用List就可以随便指定要创建什么类型的对象了。 另一个例子: public void fun(List<Integer> list) { list.get(0); } 相对这个例子而言,它可以动态的指定调用方要传入什么样的类型。如果你当前的版本需要ArrayList,则需要传入ArrayList,假如在后期发现,LinkedList更合适,你只需要改调用方就可以了,而不需要再来改这儿的代码。所以,它比直接使用ArrayList更方便。 嗯。。大概就这样吧。你上面的那种写法,只是习惯问题,没有哪种好与不好。
嗯。。那个for语句没看懂,是太高深了还是大神笔误了。。
tanling8334 2017-11-06
  • 打赏
  • 举报
回复
声明的时候尽量使用接口或者父类,面向接口编程是面向对象设计的原则之一。因为越抽象的声明类型越稳定。如果需要更换实现只需要修改赋予对象的那部分代码。 List其实是一个接口interface。声明为List时,当我不想用ArrayList时可以随时换为LinkedList。但是如果直接声明为ArrayList,你使用了ArrayList特有的API时,这时你要更换为LinkedList就比较麻烦了,因为所有使用ArrayList特有API的地方都要修改了。
Bonsour 2017-11-06
  • 打赏
  • 举报
回复
从上面的写法来看,这只不过是一个书写的习惯而已,两者的结果是相等的。 但是从一些其他的角度来看,使用List做引用,有很多好处。 如果你知道依赖倒置原则,这个问题自然就不是问题了。 如果你不知道,举几个例子: List<Integer> list; for(int i = 0;i<100;i++){ if(i%2==0){ if(list == null){ list = new ArrayList(); } list.add(i); } else { if(list == null) { list = new LinkedList(); } list.add(i); } } 就是说,有些时候,可能需要的不仅仅是ArrayList,需要根据某些类型来判定究竟需要哪种类型。所以,使用List就可以随便指定要创建什么类型的对象了。 另一个例子: public void fun(List<Integer> list) { list.get(0); } 相对这个例子而言,它可以动态的指定调用方要传入什么样的类型。如果你当前的版本需要ArrayList,则需要传入ArrayList,假如在后期发现,LinkedList更合适,你只需要改调用方就可以了,而不需要再来改这儿的代码。所以,它比直接使用ArrayList更方便。 嗯。。大概就这样吧。你上面的那种写法,只是习惯问题,没有哪种好与不好。
fcyh 2017-11-06
  • 打赏
  • 举报
回复
声明的时候尽量使用接口或者父类,面向接口编程是面向对象设计的原则之一。因为越抽象的声明类型越稳定。如果需要更换实现只需要修改赋予对象的那部分代码。 List其实是一个接口interface。声明为List时,当我不想用ArrayList时可以随时换为LinkedList。但是如果直接声明为ArrayList,你使用了ArrayList特有的API时,这时你要更换为LinkedList就比较麻烦了,因为所有使用ArrayList特有API的地方都要修改了。
繁华终归落尽 2017-11-06
  • 打赏
  • 举报
回复
变量的类型尽量为接口或者抽象类,方便拓展

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧