集合源码解读----addAll方法
在多次写测试demo时,在初始化List时,总是很麻烦,需要多次调用add方法,
List是提供 addAll(Collection<? extends E> c)方法的,其实现是将集合c转为Object[],再调用arrayCopy
public boolean addAll(Collection<? extends E> c) {Object[] a = c.toArray();int numNew = a.length;ensureCapacityInternal(size + numNew); // Increments modCountSystem.arraycopy(a, 0, elementData, size, numNew);size += numNew;return numNew != 0;
}
那为什么不提供一个参数为数组的方法,addAll()方法,参数为数组呢,这样初始化List内部数据时写起来就很快。
那么尝试一下,假如这样写
public boolean addAll(Object[] a) {int numNew = a.length;ensureCapacityInternal(size + numNew); // Increments modCountSystem.arraycopy(a, 0, elementData, size, numNew);size += numNew;return numNew != 0;
}
经测试,
public static void main(String[] args) {MyList<Integer> m = new MyList();Object[] objects = {1,3,5,6,"ss"};m.addAll(objects);System.out.println(m);
}
输出结果为 [1, 3, 5, 6, ss],这就存在很明显的问题了,集合中混入了String类型。
假如参数类型为E[] ,经测试
public boolean addAll(E[] a) {int numNew = a.length;ensureCapacityInternal(size + numNew); // Increments modCountSystem.arraycopy(a, 0, elementData, size, numNew);size += numNew;return numNew != 0;
}
理论上似乎是可以的,测试结果也并没有什么问题。暂时也没想到可能会导致什么坑,
所以,我认为这应该是可行的。
欢迎大佬指正!
集合源码解读----addAll方法相关推荐
- java基本集合源码解读-JDK8/11
文章目录 前言 详尽的debugger底层查看源码配置 一.集合体系图 二.List类集合 2.1.1 ArrayList 2.1.2ArrayList底层源码分析 结论: 2.1.3 使用Array ...
- nodeJS之eventproxy源码解读
1.源码缩影 !(function (name, definition) { var hasDefine = typeof define === 'function', //检查上下文环境是否为AMD ...
- PTMs:QLoRA技巧的简介、使用方法、论文解读、源码解读之详细攻略
PTMs:QLoRA技巧的简介.使用方法.论文解读.源码解读之详细攻略 目录 QLoRA技巧的简介 1.量化.分页优化器 QLoRA技巧的使用方法 1.安装 2.入
- Java Review - Queue和Stack 源码解读
文章目录 Pre 概述 Queue Deque ArrayDeque 一览 构造函数 属性 方法 addFirst() addLast() pollFirst() pollLast() peekFir ...
- Spring5源码 - 05 invokeBeanFactoryPostProcessors 源码解读_2
文章目录 Pre 源码解读 总体流程 源码分析 细节解析 [初始化对应的集合 & 遍历用户自己手动添加的后置处理器] [调用实现了PriorityOrdered接口的BeanDefinitio ...
- jdk1.8.0_45源码解读——Set接口和AbstractSet抽象类的实现
jdk1.8.0_45源码解读--Set接口和AbstractSet抽象类的实现 一. Set架构 如上图: (01) Set 是继承于Collection的接口.它是一个不允许有重复元素的集合. ( ...
- jdk1.8.0_45源码解读——ArrayList的实现
转载自 jdk1.8.0_45源码解读--ArrayList的实现 一.ArrayList概述 ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的 ...
- 手撕Java集合源码——list集合
Java集合(一)--LinkedList和ArrayList源码 一.集合 集合主要分为两组(单列集合,双列集合) 单列集合:存放单个元素 Collection:两个重要的接口 List Set A ...
- PyTorch 源码解读之即时编译篇
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者丨OpenMMLab 来源丨https://zhuanlan.zhihu.com/ ...
最新文章
- 电脑护眼模式_看绿色护眼不管用!别再相信这些护眼方法了!想护眼记住这4点!...
- php中使用phpmailer发送邮件
- 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型
- 电子工程系庆贺电贺信_创造下一代光电子集成电路
- java返回特定下标元素_java基础--输出数组中指定元素的下标
- kafka maven没有下载_Kafka 系列(三)——Kafka 生产者详解
- 【转】FluentAPI详细用法
- TFS 2017 持续集成速记
- thinkphp5 没有getField
- 收集整理近700套微信朋友圈h5小游戏源码合集大放送
- Spring中的refresh()
- 核磁共振重建算法综述
- pytorch手写数字识别【源码实现-小清新版】
- SATA硬盘性能测试软件,趣味测试:实测SATA线对硬盘性能的影响
- Kubernetes--k8s--进阶--全面了解HPA--部署HPA实现高可用和成本控制
- python唐诗分析综合_Python爬虫抓取唐诗宋词
- 如何恢复被永久删除的Outlook邮件
- 破世界纪录了0.74秒!用Python实现自动扫雷!
- ds服务器没检测到有响应,设备或资源dns没检测到有响应 网络无法连接
- 浅析电力物联网云平台监控系统分析