List集合中add()方法和addAll()方法的区别
Add方法是将传入的参数作为当前List中的一个item存储,即使你传入一个List也只会令当前的List增加1个元素
AddAll是传入一个List,将此List中的所有元素加入到当前List中,也就是当前List会增加的元素个数为传入的List的大小
即
addAll(Collection c)add(int index, Elelemt e)
--------------------------------------addAll(Collection c)
此方法按照指定的collection的迭代器所返回的元素顺序,将该collection中的所有元素添加到此列表的尾部。如果正在进行此才做时修改指定的collec,那么此操作的行为是不确定的(这意味着如果指定的collection是次列表且此列表是非空的,那么此调用的行为是不确定的)、
AddAll()方法复制的是被添加列表的元素引用,本质上只是复制了元素的引用,并没有复制元素本身。
以调用L1.addAll(L2)为例,当列表里元素为不可变元素(例String)类型时,对L2列表内元素进行更改不会影响到L1,因为String类型本身并不能被修改,对元素的修改本质上都是修改元素引用,而引用是互不影响的。
如果列表内元素为可变元素(例如List、Map)类型,对列表L2内用用的元素的修改是会影响到L1的,因为只复制了引用,而引用指向的是同样的元素。
List<String> l1 = new ArrayList<String>();// l1为内部存储String类型的列表l1.add("1-1");l1.add("1-2");l1.add("1-3");l1.add("1-4");l1.add("1-5");List<List<String>> l2 = new ArrayList<List<String>>();// l2为内部存储ArrayList类型的列表List<String> l_t1 = new ArrayList<String>();l_t1.add("l_t1_1");List<String> l_t2 = new ArrayList<String>();l_t2.add("l_t1_2");List<String> l_t3 = new ArrayList<String>();l_t3.add("l_t1_3");l2.add(l_t1);l2.add(l_t2);l2.add(l_t3);List<String> l3 = new ArrayList<String>();// 创建空l3列表l3.addAll(l1);// l3列表内添加l1列表l1.set(3, "test");// 修改l1列表内元素的引用System.out.println("l1---" + l1);System.out.println("l3---" + l3);// 二者互不影响List<List<String>> l4 = new ArrayList<List<String>>();// 创建空l4列表l4.addAll(l2);// l4列表内添加l2列表l2.get(1).set(0, "update");l2.get(1).add("add");// 对l2列表内的元素进行修改List<String> l_t = new ArrayList<String>();l_t.add("test");l2.set(1, l_t);// 对l2列表内元素的引用进行修改System.out.println("l2---" + l2);System.out.println("l4---" + l4);// 如果修改l2列表内元素,互相影响,如果修改l2列表内元素的引用,互不影响。
List集合中add()方法和addAll()方法的区别相关推荐
- python predict_对Keras中predict()方法和predict_classes()方法的区别说明
1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...
- java——Scanner中nextLine()方法和next()方法的区别
遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...
- ExtJS中listener方法和handler方法的区别
listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...
- Keras中predict()方法和predict_classes()方法的区别
正如上篇博客中所讲,在Keras框架下执行深度学习任务时,一般会先根据训练数据集训练出模型,然后拿训练好的模型到生产环境(测试集)中部署并生产.以分类问题为例,当训练好了分类模型之后,我们要用这个模型 ...
- VBA中Activate方法和Select方法的区别
VBA中的Activate方法和Select方法看起来似乎相同,其实二者是有区别的.Activate方法的作用是激活,而Select方法的作用是选择.其区别如下: 1.对于"Sheets&q ...
- jQuery中find()方法和filter()方法的区别
jQuery官方的API这样说明filter和find函数: filter(selector):Description: Reduce the set of matched elements to t ...
- jquery中prop()方法和attr()方法的区别浅析
引用:http://www.jb51.net/article/41170.htm 官方例举的例子感觉和attr()差不多,也不知道有什么区别,既然有了prop()这个新方法,不可能没用吧,那什么时候该 ...
- Scanner中nextLine()方法和next()方法的区别
我们在使用扫描器Scanner时,遇到了字符串肯定会使用API中定义好的next()和nextLine()方法.两者一个是能读取空格一个是不能读取空格就像下面的样子 当我们把二者交换位置,再来看一下效 ...
- Java类型转换中valueOf方法和parseInt方法的区别
在Java的类型转换中,我们经常会使用valueOf或者parseInt(parseFloat/parseDouble等)来转换.这二者有什么区别呢?我们看如下的代码: String inputVal ...
最新文章
- 2018-3-10论文(网络评论非结构化信息表示与应用研究)笔记-----基于证据理论的综合评价模型建立
- docker删除es数据_docker问题:quot;rpc error: code = 2 desc = containerd: container ...quot;
- 关于Enterprise Library 两个网占.
- 智能传感器深度报告:未来机器感官的百亿美元市场【附下载】
- JavaScript的特殊函数
- leetcode202(Floyd判圈算法(龟兔赛跑算法))
- apache的prefork和workder模式
- Ubuntu出现卡logo、卡住、黑屏无法正常启动、屏幕和键盘背光无法调节等一系列问题?可能是NVIDIA显卡驱动没装好...
- 【网络配置】双网卡访问
- 全国计算机等级考试题库二级C操作题100套(第09套)
- 重复控件Repeater和数据列表控件DataList
- Hadoop入门扫盲:hadoop发行版介绍与选择
- Java中startWith方法的使用!
- 千万数据去重_如何在 1 秒内做到大数据精准去重?
- 中国开放教育资源协会
- 通过jdt解析spring mvc中url-类-方法的对应关系
- 《我家侯爷不宠我》盛大开机,丹青映画国漫IP再次“破壁”
- U盘中毒后被隐藏的文件夹无法隐藏选项无法取消
- GPU 共享内存地址映射方式
- Doxyfile 生成CHM