在多次写测试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方法相关推荐

  1. java基本集合源码解读-JDK8/11

    文章目录 前言 详尽的debugger底层查看源码配置 一.集合体系图 二.List类集合 2.1.1 ArrayList 2.1.2ArrayList底层源码分析 结论: 2.1.3 使用Array ...

  2. nodeJS之eventproxy源码解读

    1.源码缩影 !(function (name, definition) { var hasDefine = typeof define === 'function', //检查上下文环境是否为AMD ...

  3. PTMs:QLoRA技巧的简介、使用方法、论文解读、源码解读之详细攻略

    PTMs:QLoRA技巧的简介.使用方法.论文解读.源码解读之详细攻略 目录 QLoRA技巧的简介 1.量化.分页优化器 QLoRA技巧的使用方法 1.安装 2.入

  4. Java Review - Queue和Stack 源码解读

    文章目录 Pre 概述 Queue Deque ArrayDeque 一览 构造函数 属性 方法 addFirst() addLast() pollFirst() pollLast() peekFir ...

  5. Spring5源码 - 05 invokeBeanFactoryPostProcessors 源码解读_2

    文章目录 Pre 源码解读 总体流程 源码分析 细节解析 [初始化对应的集合 & 遍历用户自己手动添加的后置处理器] [调用实现了PriorityOrdered接口的BeanDefinitio ...

  6. jdk1.8.0_45源码解读——Set接口和AbstractSet抽象类的实现

    jdk1.8.0_45源码解读--Set接口和AbstractSet抽象类的实现 一. Set架构 如上图: (01) Set 是继承于Collection的接口.它是一个不允许有重复元素的集合. ( ...

  7. jdk1.8.0_45源码解读——ArrayList的实现

    转载自  jdk1.8.0_45源码解读--ArrayList的实现 一.ArrayList概述 ArrayList是List接口的可变数组的实现.实现了所有可选列表操作,并允许包括 null 在内的 ...

  8. 手撕Java集合源码——list集合

    Java集合(一)--LinkedList和ArrayList源码 一.集合 集合主要分为两组(单列集合,双列集合) 单列集合:存放单个元素 Collection:两个重要的接口 List Set A ...

  9. PyTorch 源码解读之即时编译篇

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者丨OpenMMLab 来源丨https://zhuanlan.zhihu.com/ ...

最新文章

  1. 电脑护眼模式_看绿色护眼不管用!别再相信这些护眼方法了!想护眼记住这4点!...
  2. php中使用phpmailer发送邮件
  3. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型
  4. 电子工程系庆贺电贺信_创造下一代光电子集成电路
  5. java返回特定下标元素_java基础--输出数组中指定元素的下标
  6. kafka maven没有下载_Kafka 系列(三)——Kafka 生产者详解
  7. 【转】FluentAPI详细用法
  8. TFS 2017 持续集成速记
  9. thinkphp5 没有getField
  10. 收集整理近700套微信朋友圈h5小游戏源码合集大放送
  11. Spring中的refresh()
  12. 核磁共振重建算法综述
  13. pytorch手写数字识别【源码实现-小清新版】
  14. SATA硬盘性能测试软件,趣味测试:实测SATA线对硬盘性能的影响
  15. Kubernetes--k8s--进阶--全面了解HPA--部署HPA实现高可用和成本控制
  16. python唐诗分析综合_Python爬虫抓取唐诗宋词
  17. 如何恢复被永久删除的Outlook邮件
  18. 破世界纪录了0.74秒!用Python实现自动扫雷!
  19. ds服务器没检测到有响应,设备或资源dns没检测到有响应 网络无法连接
  20. 浅析电力物联网云平台监控系统分析

热门文章

  1. Ten simple rules for the computational modeling of behavioral data — 认知科学建模教程
  2. python输入整数n计算并输出1+22+333+4444_编程题
  3. 多线程并发编程的基本问题
  4. 投资 7 -- 价值投资的操作记录
  5. 雅思听力匹配题做题技巧
  6. 【c语言】递归函数计算厄密多项式的值
  7. 手把手带你封装一个vue移动端的脚手架
  8. 华清远见——重庆中心C高级学习笔记
  9. CakePHP 2.x CookBook 中文版 第六章 视图 之二
  10. 乌班图查看分区文件系统类型的命令