潜意识中asList方法的两个迷惑
更新时间:2023-04-27 23:46:01 阅读量: 实用文档 文档下载
- 潜意识中的我推荐度:
- 相关推荐
-
潜意识中asList方法的两个迷惑
我们在学习集合过程中都学过一个将数组转换为集合的方法,那就是Arrays类里面的asList 方法,下面我们用一个案例简单的回顾一下asList方法的用法
import java.util.Arrays;
import java.util.List;
publicclass Demo3 {
publicstaticvoid main(String[] args) {
//定义String类型的数组
String[] arr = {"abc","bcd","efg","hij"};
//通过Arrays类的asList方法转为List集合
List
//遍历集合
for (String string : list) {
System.out.println(string);
}
}
}
这个方法确实可以将数组转换为集合,但是转成的集合只能做修改元素和查找元素,却不能做任何增加元素或者删除元素的操作,也就是只要改变其长度的操作此集合都不能做,我们用下面的代码去说明一下:
- zj.
-
- zj.
-
可是,这和我们所知道的集合有冲突阿,我们所知道的普通的List集合是可以做增删的操作的,但是为什么通过asList方法生成的集合却不能做该操作呢?这么做的目的何在呢?接着来我们就去研究这两个问题:
1:这么做的目的何在?
2:底层通过什么样的原理来让此集合不能做增删的操作?
首先研究第一个问题:这么做的目的
我想问大家一个问题,如果我把上面代码中集合的第一个元素修改为“klm”之后,那么被转成集合的那个数组里面的第一个元素改变了没有?我相信很多人都会说“没有”,那么接下来我们去验证一下
- zj.
-
通过验证我们知道了,改变集合里面的元素,数组里面的元素也会跟着去改变的,我们得到了一个结论就是数组里面的数据和被转成的集合里面的数据是同一个数据,集合和数组里面的内容是同步改变的,改了数组的数据,那集合的数据也会被改变,改了集合的数据数组的数据也会被改变。然而数组的长度是不能改变的,所以此集合也做了对应的限制。
我们得到结论,这么做的目的是为了让数组和集合的数据共享。
接着研究第二个问题:底层如何做到不能增删
我们先去观察一下asList方法的源码,
你会发现asList方法返回一个ArrayList集合,但是请大家千万不要被迷惑,此ArrayList 可不是咱们日常用的ArrayList集合阿,接下来我们去看一下这个ArrayList的源码
- zj.
-
通过观察源码我们发现,需要被转为集合的数组通过ArrayList的构造方法传给ArrayList 内部数组类型的a变量,然后无论是get还是set方法都是操作的a数组,所以在我们的测试中我们会看到数组和集合是联动的。但是找了我们发现ArrayList里面并没有增删元素的方法即add和remove方法,ArrayList类里面没有但是却能使用add和remove方法,那只能说明这两个方法是父类AbstractList的,所以我们去查看AbstractList的源码
- zj.
-
原来AbstractList里面的add和remove方法里面仅有一句抛出异常的代码,所以当我们用数组转成的集合对象调用add和remove方法的时候会报出此异常。但是那为什么其他集合比如LinkedList或者Vector集合调用add和remove却不报此异常呢?那是因为LinkedList 和Vector重写了add和remove方法,他们的对象使用的是自己的这两个方法,而不是使用的AbstractList的add和remove方法。
- zj.
正在阅读:
潜意识中asList方法的两个迷惑04-27
2015年4月自考消费经济学试题+答案03-30
2015 消费税练习题 附答案05-02
计量地理学题库07-05
江苏省2018年普通高校对口单招文化统考机械专业综合理论试卷(机械基础部分)11-23
K3物料介绍04-24
活动区的指导策略08-07
行业分析2018-2023年中国船舶电气控制设备行业发展深度调研与投资机会研究报告(目录)11-28
给妈妈画像作文500字06-30
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 潜意识
- 迷惑
- 两个
- 方法
- asList
- Project Server 2003安装实验手册
- 2015年党章知识测试“学党章 守纪律 当先锋”学习测试题库及答案
- 高碑店市战略性新兴产业研究报告
- 一文看懂外科200年发展史
- 塔城地区职称论文发表-节能工程暖通空调设计论文选题题目
- 创建文明城市工作的自查报告
- 国外世界各国法定节假日情况
- 最新教师对学校满意度调查问卷
- 家具、橱柜、衣柜招标文件
- 第二章基本初等函数(I)综合测试(二)(人教A版版必修1)
- 北京市朝阳区2018届高三第一学期期末质量检测地理试卷及答案
- 2018年浙江师范大学地理与环境科学学院333教育综合之教育学基础考研强化五套模拟题
- matlab(四连杆优化设计)
- 城市垃圾分类与资源回收再利用方案
- 内蒙古电力公司分布式发电项目并网服务管理细则(试行)9-26
- 2017年重庆师范大学物理与电子工程学院840普通物理Ⅱ考研仿真模拟题
- 高三文言虚词复习导学案教师版(一)(最新整理)
- 六年级下册英语试题--小升初模拟训练四北师大版含答案
- 【新版】苏教版三年级语文上册《军神》教学设计【名校精品】
- 会计英语词汇大全2万条(词典级)