为什么要用接口引用指向实现类的对象?

这种写法其实java多态的表现形式

多态的定义:

指允许不同类的对象对同一消息做出响应。

即同一消息可以根据发送对象的不同而采用多种不同的行为方式。

(发送消息就是函数调用

List list;是在栈区开辟一个空间放list引用,并没有创建对象所以不知道ArrayList还是LinkedList

当你list= new ArrayList(); 就创建了ArrayList对象。

并且把开始创建的list引用指向这个对象ArrayList和LinkedList都是List的实现类。

为什么一般都使用 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(); ,便于程序代码的重构.

这就是面向接口编程的好处

注意事项

list只能使ArrayList中已经实现了的List接口中的方法

,ArrayList中那些自己的、没有在List接口定义的方法是不可以被访问到的

list.add()

其实是List接口的方法

但是调用ArrayList的方法如 clone()方法是调用不到的

ArrayList源码分析:

1.add(int index ,Object obj):首先判断是否越界?数组拷贝的原理;把index 拷贝到index+1,size-1

是拷贝长度,将元素添加到索引为index的位置上,元素的个数+1

2.get(int index):根据索引获取元素对象,调用elementDate(index)方法:在Object类型的数组中

根据索引取出元素对象

3.size():每次添加size+1

4.isEmpty():判断元素是否一个没有返回布尔类型的值

5.set(int index):在指定索引位置修改我们对象:调用elementDate(index)方法:根据索引把元素调出

再设置新的元素到index位置,返回一个old元素后 设置成功

6.remove(int index):调用elementDate(index)方法:获取元素,size-index-1?

7.clear():循环设置元素位置为null然后长度size设为0

8.iterator!!!

LinkedList:链表

Vector:创建的时候初始化容量就是10 和ArrayList的底层结构相同都是Object类型的数组,ArrayList

在add元素的时候才会初始化容量 扩容方式 Arrays扩容每次0.5倍 Vector每次扩容1倍

ArraysList线程非同步(jdk1.2)是Vector(jdk1.0安全性高线程同步的优化

java修改list中对象的值_Java中List集合的一点总结相关推荐

  1. java中对象作为参数_java中对象引用,特别作为参数时候注意事项

    1.基础知识 1Byte=8bit Byte和byte一个是对象,一个是基本数据类型而已,都是8bit 2.java中对象引用和值传递: (1).java中若一对象当作参数就是相当于,将变量对应的指向 ...

  2. java中对象的生存期_Java中对象的生存周期

    文章目录 JAVA对象的生存周期 1.创建阶段(Created) 为对象分配内存需要考虑的问题 2.应用阶段(In Use) 3.不可见阶段(Invisible) 4.不可达阶段(Unreachabl ...

  3. java中对象别名使用_JAVA中的别名现象

    问题的提出: 在java中,对基本数据类型的赋值时,是将数据从一个地方复制到另外一个地方,当a=b时,将b的内容复制给a,若修改a时,b并不会受到这种修改的影响. 在对对象进行赋值时,当我们对一个对象 ...

  4. java复制两个对象报异常_Java中复制两个不同类的对象的属性

    Apache的开源包BeanUtils用来复制两个对象的属性,要使用这个Apache的开源包,要先去官网下载commons-beanutils-1.X.jar包,http://www.apache.o ...

  5. java中对象字节数_JAVA中求解对象所占字节大小

    该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口 接口1:计算对象在内存中所占字节数 接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象:返回一个新的对象, ...

  6. java交换两个变量的值_Java中交换两个整数变量的值

    需求 如下,我们定义了两个整数变量,并且分别进行了赋值,下面,我们需要实现的就是将x的值赋值给y,将y值赋值给x,实现x和y的值交换: int x = 100; int y = 200; 方法一:使用 ...

  7. java中return返回值_Java中return的用法

    展开全部 一.return语句总是用在方法中,有两个作用. 一个是返回方法指定类型的值(这个值总62616964757a686964616fe59b9ee7ad9431333366306434是确定的 ...

  8. java 获取下拉框的值_java中怎么获取下拉框的值

    展开全部 JComboBox有一个getSelectedItem()的方法得到选择的值和一个getSelectedIndex()得到选择值的索引.636f70793231313335323631343 ...

  9. java中long比较大小_java中Long类型比较大小和long类型的比较大小java中Long类型比较大小和long类型的比较大小...

    今天遇到这样一个问题,我用 "=="来比较两个Long类型的数据,明明数值都相等,可是结果就是false 这要说到==和 equals 的区别了. 1. ==比较的是两个对象在内存 ...

最新文章

  1. Java、Android静态代理与动态代理
  2. java 反射详解通俗易懂
  3. R数据导入导出(一): read.table()和read.csv()的区别
  4. org.activiti.engine.ActivitiOptimisticLockingException updated by another transaction concurrently
  5. python中的reduce函数用法
  6. Spring框架----Confinguration和Component-Scan注解
  7. struts入门的ognl
  8. { parser: “babylon“ } is deprecated; we now treat it as { parser: “babel“ }.
  9. /bin/sh: cc: 未找到命令
  10. hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存
  11. DNN群宗旨--QQ群(DNN山海经):56782274
  12. vim字符串替换命令
  13. 任务栏优化工具TrueLaunchBar
  14. SIGHUP信号与控制终端
  15. 世纪佳缘发布婚恋观报告 “90”后和高学历人群更焦虑
  16. 量子计算机分解时间,量子计算机如何分解两个质数乘积
  17. mysql事务排队情况_MySQL事务问题
  18. 什么是真正的 HTAP ?(二)挑战篇
  19. springBoot二维码生成案例
  20. matlab 子波,基于Matlab的Bark子波实现

热门文章

  1. LeetCode 1362. 最接近的因数
  2. 剑指Offer - 面试题62. 圆圈中最后剩下的数字(约瑟夫环 递推公式)
  3. VC.NET字符指针与String的转换
  4. python中的_init_的使用
  5. php 数据接口,初识 php 接口
  6. fft的c语言和matlab对比_傅里叶级数(FS)、傅里叶变换(FT)快速傅里叶变换(FFT)及量子傅里叶变换(QFT)之间推导关系...
  7. Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
  8. 最新天猫Java3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper
  9. 论文浅尝 | 从知识图谱流中学习时序规则
  10. 基于主动学习算法减少人工标注量,提升文本标注效率的方案探究