一、首先明确:List是接口,ArrayList是它的实现类

以下两种方法都可以,但是不提倡第二种:

List list=new ArrayList();
ArrayList list=new ArrayList();

二、那么第一种方法有什么好处?

  1. 在设计模式中有对依赖倒置原则。程序要尽量依赖于抽象,不依赖于具体。 从Java语法上,这种方式是使用接口引用指向具体实现。

比如,你若希望用LinkedList的实现来替代ArrayList的话,只需改动一行即可,其他的所有的都不需要改动:

List list=new LinkedList();

这也是一种很好的设计模式.一个接口有多种实现,当你想换一种实现方式时,你需要做的改动很小.

  1. 面向接口编程
  2. 提高程序宽展性,以后修改维护好些

声明一个接口的变量(接口的引用)可以指向一个实现类(实现该接口的类)的实例, 但是该接口的变量不能使用实现类中有,接口中没有的方法(实现类中没有重写的方法,自添加的方法)
详细解释:

ArrayList不是继承List接口,是实现了List接口。 你写成ArrayList arrayList = newArrayList();这样不会有任何问题。
和List list = new ArrayList();相比这2个写是有区别的。arrayList是一个ArrayList对象,它可以使用ArrayList的所有方法。
List是接口,它是不可以被实例化的(接口是个抽象类),所以必须以它的实现类去实例化它。list对象虽然也是被实例化为ArrayList但是它实际是List对象,list只能使用ArrayList中已经实现了的List接口中的方法,ArrayList中那些自己的、没有在List接口定义的方法是不可以被访问到的。
我们说,用接口去做是有它的好处的,如果你把类型定义成ArrayList(也就是一个具体的实现类)那么你就只能接收这一种类型的数据了,如果你要是定义为List那么你不仅可以接收ArrayList的对象还可以接收LinkedList的对象,这样你的程序就灵活了。

文章参考

三、例子看一下

声明接口:

public interface Animal {void say();void listen();
}

实现类:

public class Dog implements Animal {@Overridepublic void say() {System.out.println("say");}@Overridepublic void listen() {System.out.println("listen");}public void run(){System.out.println("run");}
}

测试类:

可以很明显看到两种实现方式的不同点(接口的变量不能使用实现类中有,接口中没有的方法)

List list=new ArrayList()怎么回事相关推荐

  1. Java 集合系列(2): ArrayList源码深入解析和使用示例

    戳上面的蓝字关注我们哦! 精彩内容 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 java项目练习精选 概要 上一章,我们学习了Collection的架构.这一章开始,我们对C ...

  2. [C#]泛型与非泛型集合类的区别及使用例程,包括ArrayList,Hashtable,ListT,DictionaryTkey,Tvalue,SortedListTkey,Tvalue,...

    今天有空正好把泛型和非泛型集合类写了一个比较,并做了个的例程,可以比较清楚的理解它们概念和使用方法. 泛型与非泛型集合类在C#程序中是非常重要的一个基础概念,这里列一个表来进行对比: 非泛型集合类 泛 ...

  3. arraylist 初始化_ArrayList实现原理(JDK1.8)

    public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Serial ...

  4. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  5. arraylist扩容是创建新数组吗 java_Java编程之数组扩容

    一.背景 数组在实际的系统开发中用的越来越少了,我们只有在阅读某些开源项目时才会看到数组的使用.在Java中,数组与List.Set.Map等集合类相比,后者使用起来方便,但是在基本数据类型处理方面, ...

  6. arraylist删除指定元素_揭开ArrayList的外衣看本质

    揭开ArrayList的外衣,看本质​mp.weixin.qq.com 源码还是比较多的,安安静静的读完确实不易,所以我们读源码要有着重点. ArrayList的继承和实现关系 ArrayList的成 ...

  7. ArrayList和LinkedList的插入删除性能差距到底有多大

    2019独角兽企业重金招聘Python工程师标准>>> 从算法角度来看,ArrayList是便于做查询的容器,LinkedList适合插入删除.如果在一个LinkedList做查询的 ...

  8. ArrayList 重拳出击,把 LinkedList 干翻在地

    大家好,我是二哥呀. 这是<Java 程序员进阶之路>专栏的第 60 篇,我们来聊聊 ArrayList 和 LinkedList 之间的区别.大家可以到 GitHub 上给二哥一个 st ...

  9. 线程安全的ArrayList——CopyOnWriteArrayList

    CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略.同时因为获取-修改-写入三步操作并不 ...

最新文章

  1. php 千万级访问量网站,承受每天百万级访问量的网站需要多少台服务器?
  2. Service rootservice does not have a SELinux domain defined
  3. windows下升级nodenpm
  4. 【全面完美方案】iPhone 4S WiFi变灰 DIY修复方式
  5. BlockChange丨谁在监管加密货币?各国数字货币政策情况概览
  6. 博文内部设置目录尝试
  7. VUE项目导入bootstrap
  8. 栅栏密码加密/解密【W型】在线工具
  9. wso2 mysql_windows下 WSO2 Application Server配置 及 MySQL数据服务部署
  10. Lora网关节点汇聚传感器数据
  11. PHP将uncode转utf8,一行代码解决问题
  12. Excel VBA 编程的常用代码
  13. 中水是什么?有什么用途呢?
  14. Emoji 表情还能这样玩?
  15. pytorch锁死在dataloader(训练时卡死)
  16. react前端项目_如何使用React前端设置Ruby on Rails项目
  17. 地方门户网站盈利的“达摩五指”
  18. 支付宝统一支付回调接口(适用于H5、PC、APP)
  19. 音频知识点(12)- P.563 工具编译及使用教程
  20. 华为vr计算机连接线,贝尔金推出HUAWEI VR Glass计算机数据线

热门文章

  1. ORA-04031: Unable To Allocate 32 Bytes Of Shared Memory
  2. UML大战需求分析--阅读笔记02
  3. W-D-S-UART编程
  4. 糖尿病(消渴)的中药简见简方(转载)
  5. hdu 1500 Chopsticks
  6. Delphi将输入汉字自动产生拼音简码
  7. pytorch安装问题:路径不对导致no moduled name 'torch'
  8. [云炬创业基础笔记]第七张创业团队测试2
  9. 填表2018-11-11
  10. 九、“行胜于言车胜马,负重致远向前途”