java修改list中对象的值_Java中List集合的一点总结
为什么要用接口引用指向实现类的对象?
这种写法其实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集合的一点总结相关推荐
- java中对象作为参数_java中对象引用,特别作为参数时候注意事项
1.基础知识 1Byte=8bit Byte和byte一个是对象,一个是基本数据类型而已,都是8bit 2.java中对象引用和值传递: (1).java中若一对象当作参数就是相当于,将变量对应的指向 ...
- java中对象的生存期_Java中对象的生存周期
文章目录 JAVA对象的生存周期 1.创建阶段(Created) 为对象分配内存需要考虑的问题 2.应用阶段(In Use) 3.不可见阶段(Invisible) 4.不可达阶段(Unreachabl ...
- java中对象别名使用_JAVA中的别名现象
问题的提出: 在java中,对基本数据类型的赋值时,是将数据从一个地方复制到另外一个地方,当a=b时,将b的内容复制给a,若修改a时,b并不会受到这种修改的影响. 在对对象进行赋值时,当我们对一个对象 ...
- java复制两个对象报异常_Java中复制两个不同类的对象的属性
Apache的开源包BeanUtils用来复制两个对象的属性,要使用这个Apache的开源包,要先去官网下载commons-beanutils-1.X.jar包,http://www.apache.o ...
- java中对象字节数_JAVA中求解对象所占字节大小
该类为cache4j缓存框架中的工具类方法,该方法实现了两个接口 接口1:计算对象在内存中所占字节数 接口2:复制对象,实现深度克隆效果,实现原理为先序列化对象,然后在反序列化对象:返回一个新的对象, ...
- java交换两个变量的值_Java中交换两个整数变量的值
需求 如下,我们定义了两个整数变量,并且分别进行了赋值,下面,我们需要实现的就是将x的值赋值给y,将y值赋值给x,实现x和y的值交换: int x = 100; int y = 200; 方法一:使用 ...
- java中return返回值_Java中return的用法
展开全部 一.return语句总是用在方法中,有两个作用. 一个是返回方法指定类型的值(这个值总62616964757a686964616fe59b9ee7ad9431333366306434是确定的 ...
- java 获取下拉框的值_java中怎么获取下拉框的值
展开全部 JComboBox有一个getSelectedItem()的方法得到选择的值和一个getSelectedIndex()得到选择值的索引.636f70793231313335323631343 ...
- java中long比较大小_java中Long类型比较大小和long类型的比较大小java中Long类型比较大小和long类型的比较大小...
今天遇到这样一个问题,我用 "=="来比较两个Long类型的数据,明明数值都相等,可是结果就是false 这要说到==和 equals 的区别了. 1. ==比较的是两个对象在内存 ...
最新文章
- Java、Android静态代理与动态代理
- java 反射详解通俗易懂
- R数据导入导出(一): read.table()和read.csv()的区别
- org.activiti.engine.ActivitiOptimisticLockingException updated by another transaction concurrently
- python中的reduce函数用法
- Spring框架----Confinguration和Component-Scan注解
- struts入门的ognl
- { parser: “babylon“ } is deprecated; we now treat it as { parser: “babel“ }.
- /bin/sh: cc: 未找到命令
- hibernate笔记--缓存机制之 二级缓存(sessionFactory)和查询缓存
- DNN群宗旨--QQ群(DNN山海经):56782274
- vim字符串替换命令
- 任务栏优化工具TrueLaunchBar
- SIGHUP信号与控制终端
- 世纪佳缘发布婚恋观报告 “90”后和高学历人群更焦虑
- 量子计算机分解时间,量子计算机如何分解两个质数乘积
- mysql事务排队情况_MySQL事务问题
- 什么是真正的 HTAP ?(二)挑战篇
- springBoot二维码生成案例
- matlab 子波,基于Matlab的Bark子波实现
热门文章
- LeetCode 1362. 最接近的因数
- 剑指Offer - 面试题62. 圆圈中最后剩下的数字(约瑟夫环 递推公式)
- VC.NET字符指针与String的转换
- python中的_init_的使用
- php 数据接口,初识 php 接口
- fft的c语言和matlab对比_傅里叶级数(FS)、傅里叶变换(FT)快速傅里叶变换(FFT)及量子傅里叶变换(QFT)之间推导关系...
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
- 最新天猫Java3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper
- 论文浅尝 | 从知识图谱流中学习时序规则
- 基于主动学习算法减少人工标注量,提升文本标注效率的方案探究