List array = new ArrayList(); 和ArrayList array = new ArrayList();有什么区别吗?

mrz0416 2016-08-24 12:14:04
List array = new ArrayList();
ArrayList array = new ArrayList();
我倒是知道Arrlist是List的具体实现类,但是创建时集合时这两个有什么区别吗?分别什么时候用?
小白一个 见笑了
...全文
365 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灯光环 2016-08-24
  • 打赏
  • 举报
回复
都可以~ 好好了解一下java的多态性~
mrz0416 2016-08-24
  • 打赏
  • 举报
回复
引用 1 楼 zhuangqingch 的回复:
从使用的角度,只是在可调用的方法上有差异: 使用List声明变量,只能调用到List中声明的方法,而ArrayList则除了List的方法可用外,还可以使用自己独有的方法(除了实现List接口的方法,还有自己新增的一些方法) 关于二者的使用场景,楼主可以先了解下java中多态的思想。这里简单说下。多态主要建立在继承的基础上,如声明一个类或接口A,让A1,A2,A3三个类都继承(或实现)A,则声明对象时,可以使用 A a = new A1(), A a = new A2() A a = new A3()。这里的a变量可表现出一种多态形式,即可以表示A1或A2或A3 下面再说下使用场景: 一.2种随意用的情况 在不涉及想动态控制实现对象(多态),以及不使用具体实现类的独有方法时,2种方式都可以用。 二、用List的场景 想动态控制实现对象的场景,则需要使用List这种声明形式。 什么是动态控制实现对象,举个例了,现在有个类A,声明如下。 public class A { private ArrayList list; public void setList(ArrayList list) { this.list = list; } public ArrayList getList() { return list; } } 还有一个类B,该类使用了A类中的list public class B { public void dosomething1() { A a = new A(); a.setList(new ArrayList()); } public void dosomething2(A a) { ArrayList list = a.getList(); System.out.println(list.size()); } public void dosomething3(A a) { ArrayList list = a.getList(); System.out.println(list.size()); } } 假设,现在业务场景中使用ArrayList存在性能问题,需要将ArrayList替换为其他性能较好的实现类,比如修改为LinkedList,则会很麻烦。 1.A类声明要重新调整(对象list类型,get/set参数类型) 2.所有使用了A类的list变量的数据,都得调整(因为是声明为具体实现类的,修改了实现类,声明肯定要改) 这种场景下,就需要使用多态的特性来处理了。如将ArrayList声明修改为List,具体实现不关注。楼主有兴趣的话,可以了解下面向接口编程的思想。 注意:多态的场景下,具体实现类的独有方法将被屏蔽,需要用时,要结合业务场景去考虑可不可以强制转换 三、用ArrayList的场景 想调用ArrayList中独有的方法使用
引用 1 楼 zhuangqingch 的回复:
从使用的角度,只是在可调用的方法上有差异: 使用List声明变量,只能调用到List中声明的方法,而ArrayList则除了List的方法可用外,还可以使用自己独有的方法(除了实现List接口的方法,还有自己新增的一些方法) 关于二者的使用场景,楼主可以先了解下java中多态的思想。这里简单说下。多态主要建立在继承的基础上,如声明一个类或接口A,让A1,A2,A3三个类都继承(或实现)A,则声明对象时,可以使用 A a = new A1(), A a = new A2() A a = new A3()。这里的a变量可表现出一种多态形式,即可以表示A1或A2或A3 下面再说下使用场景: 一.2种随意用的情况 在不涉及想动态控制实现对象(多态),以及不使用具体实现类的独有方法时,2种方式都可以用。 二、用List的场景 想动态控制实现对象的场景,则需要使用List这种声明形式。 什么是动态控制实现对象,举个例了,现在有个类A,声明如下。 public class A { private ArrayList list; public void setList(ArrayList list) { this.list = list; } public ArrayList getList() { return list; } } 还有一个类B,该类使用了A类中的list public class B { public void dosomething1() { A a = new A(); a.setList(new ArrayList()); } public void dosomething2(A a) { ArrayList list = a.getList(); System.out.println(list.size()); } public void dosomething3(A a) { ArrayList list = a.getList(); System.out.println(list.size()); } } 假设,现在业务场景中使用ArrayList存在性能问题,需要将ArrayList替换为其他性能较好的实现类,比如修改为LinkedList,则会很麻烦。 1.A类声明要重新调整(对象list类型,get/set参数类型) 2.所有使用了A类的list变量的数据,都得调整(因为是声明为具体实现类的,修改了实现类,声明肯定要改) 这种场景下,就需要使用多态的特性来处理了。如将ArrayList声明修改为List,具体实现不关注。楼主有兴趣的话,可以了解下面向接口编程的思想。 注意:多态的场景下,具体实现类的独有方法将被屏蔽,需要用时,要结合业务场景去考虑可不可以强制转换 三、用ArrayList的场景 想调用ArrayList中独有的方法使用
谢谢 我懂了 让你打这么多字 浪费你时间了
zhuangqingch 2016-08-24
  • 打赏
  • 举报
回复
从使用的角度,只是在可调用的方法上有差异: 使用List声明变量,只能调用到List中声明的方法,而ArrayList则除了List的方法可用外,还可以使用自己独有的方法(除了实现List接口的方法,还有自己新增的一些方法) 关于二者的使用场景,楼主可以先了解下java中多态的思想。这里简单说下。多态主要建立在继承的基础上,如声明一个类或接口A,让A1,A2,A3三个类都继承(或实现)A,则声明对象时,可以使用 A a = new A1(), A a = new A2() A a = new A3()。这里的a变量可表现出一种多态形式,即可以表示A1或A2或A3 下面再说下使用场景: 一.2种随意用的情况 在不涉及想动态控制实现对象(多态),以及不使用具体实现类的独有方法时,2种方式都可以用。 二、用List的场景 想动态控制实现对象的场景,则需要使用List这种声明形式。 什么是动态控制实现对象,举个例了,现在有个类A,声明如下。 public class A { private ArrayList list; public void setList(ArrayList list) { this.list = list; } public ArrayList getList() { return list; } } 还有一个类B,该类使用了A类中的list public class B { public void dosomething1() { A a = new A(); a.setList(new ArrayList()); } public void dosomething2(A a) { ArrayList list = a.getList(); System.out.println(list.size()); } public void dosomething3(A a) { ArrayList list = a.getList(); System.out.println(list.size()); } } 假设,现在业务场景中使用ArrayList存在性能问题,需要将ArrayList替换为其他性能较好的实现类,比如修改为LinkedList,则会很麻烦。 1.A类声明要重新调整(对象list类型,get/set参数类型) 2.所有使用了A类的list变量的数据,都得调整(因为是声明为具体实现类的,修改了实现类,声明肯定要改) 这种场景下,就需要使用多态的特性来处理了。如将ArrayList声明修改为List,具体实现不关注。楼主有兴趣的话,可以了解下面向接口编程的思想。 注意:多态的场景下,具体实现类的独有方法将被屏蔽,需要用时,要结合业务场景去考虑可不可以强制转换 三、用ArrayList的场景 想调用ArrayList中独有的方法使用

62,628

社区成员

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

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