List学习:add()方法和addAll()方法的区别

Add方法是将传入的参数作为当前List中的一个item存储,即使你传入一个List也只会令当前的List增加1个元素

AddAll是传入一个List,将此List中的所有元素加入到当前List中,也就是当前List会增加的元素个数为传入的List的大小

addAll(Collection c)

   add(int index, element e)

--------------------------------------

   addAll(Collection c)

 

此方法按照指定的collection的迭代器所返回的元素顺序,将该collection中的所有元素添加到此列表的尾部。

如果正在进行此才做时修改指定的collec,那么此操作的行为是不确定的(这意味着如果指定的collection是次列表且此列表是非空的,那么此调用的行为是不确定的)

AddAll()方法复制的是被添加列表的元素引用,本质上只是复制了元素的引用,并没有复制元素本身。

以调用L1.addAll(L2)为例,当列表里元素为不可变元素(例String)类型时,对L2列表内元素进行更改不会影响到L1,因为String类型本身并不能被修改,对元素的修改本质上都是修改元素引用,而引用是互不影响的。

如果列表内元素为可变元素(例如List、Map)类型,对列表L2内用用的元素的修改是会影响到L1的,因为只复制了引用,而引用指向的是同样的元素。

eg:

Collection result1 = new ArrayList();

Collection result2 = new ArrayList();

----------------------------------------------

result1.addAll(result2);   //把后者中每一个元素分别加入前者,result1.size()=result2.size();

result2.add(result2);   //把后者以一个list整体加入前者,result1.size()=1;

 

posted @ 2022-01-17 17:25  都是好事  阅读(292)  评论(0编辑  收藏  举报