1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > List集合中add()方法和addAll()方法的区别

List集合中add()方法和addAll()方法的区别

时间:2019-12-05 20:15:03

相关推荐

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列表内元素的引用,互不影响。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。