List.addAll()操作总结

List引用一
  1. List<Person> persons = PersonService.getPersonsByAgeIn(18,23);//初始化一个Person的List。  
  2. List<Person> backPersons = persons;  
显然,对backPersons的操作会直接改变persons的数据。
backPersons只是定义了一个数据引用,并没有初始化申请空间。现在的backPersons就是persons。

那么,换以下方式呢?

public class TestListYinyong {
    public static void main(String[] args) {
        Person person=new Person("1111");
        Person person1=new Person("2222");
        Person person2=new Person("3333");
        List<Person> personList=new ArrayList<>();
        personList.add(person);
        personList.add(person1);
        personList.add(person2);
        for (Person person0:personList){
            System.out.println("最开始的personList   "+person0.getName());
        }

        //改变person的值是会影响原来的personList的(会改变personList的值)
        System.out.println();System.out.println();System.out.println();
        List<Person> personList2=new ArrayList<>();
        personList2=personList;
        personList2.get(0).setName("111111111111");
        for (Person person0:personList){
            System.out.println("改变personList2中的person的值后的personList   "+person0.getName());
        }
}
输出结果:
最开始的personList   1111
最开始的personList   2222
最开始的personList   3333


改变personList2中的person的值后的personList   111111111111
改变personList2中的person的值后的personList   2222
改变personList2中的person的值后的personList   3333

所以结果就是:如图两个list同时引用同一个list对象


List引用二:list.addAll()


  
  
  1. List<Person> persons = PersonService.getPersonsByAgeIn(18,23);//初始化一个Person的List。  
  2. List<Person> backPersons = new ArrayList<Person>();  
  3. backPersons.addAll(persons);  

这样给backPerson赋值之后再操作内部数据,此处分两种情况,如果对backPersons的操作是在List层的操作,对persons没有影响。也就是说,如果backPersons只是对内部数据做了简单的删除、排序或者添加等操作。但是,如果操作深入到List内部数据层,那么backPersons数据修改就会影响到persons的数据。

原因很简单,backPersons中的每一个Person都是persons一样的Person。那么,操作对象的时候就会有影响。

总结:对对象操作对原来的list会有影响,list层的操作对原来的list不会有影响。

public class TestListYinyong { public static void main(String[] args) { Person person=new Person("1111"); Person person1=new Person("2222"); Person person2=new Person("3333"); List<Person> personList=new ArrayList<>(); personList.add(person); personList.add(person1); personList.add(person2); for (Person person0:personList){ System.out.println("最开始的personList "+person0.getName()); } //改变person的值是会影响原来的personList的(会改变personList的值) System.out.println();System.out.println();System.out.println(); List<Person> personList2=new ArrayList<>(); personList2.addAll(personList); personList2.get(0).setName("111111111111"); for (Person person0:personList){ System.out.println("改变personList2中的person的值后的personList "+person0.getName()); } //对personList2增加数据,看一下对personList的影响(对personList没影响) System.out.println();System.out.println();System.out.println(); personList2.add(new Person("4444")); for (Person person0:personList){ System.out.println("对personList2增加数据后的personList "+person0.getName()); } //对personList2删除数据,看一下对personList的影响(对personList没影响) System.out.println();System.out.println();System.out.println(); personList2.remove(0); System.out.println(); for (Person person0:personList){ System.out.println("对personList2删除数据后的personList "+person0.getName()); } //清空personList2数据,看一下对personList的影响(对personList没影响) System.out.println();System.out.println();System.out.println(); personList2.clear(); System.out.println(); for (Person person0:personList){ System.out.println("清空personList2数据后的personList "+person0.getName()); } } }

输出结果:
最开始的personList   1111
最开始的personList   2222
最开始的personList   3333


改变personList2中的person的值后的personList   111111111111
改变personList2中的person的值后的personList   2222
改变personList2中的person的值后的personList   3333


对personList2增加数据后的personList   111111111111
对personList2增加数据后的personList   2222
对personList2增加数据后的personList   3333


对personList2删除数据后的personList   111111111111
对personList2删除数据后的personList   2222
对personList2删除数据后的personList   3333


清空personList2数据后的personList   111111111111
清空personList2数据后的personList   2222

清空personList2数据后的personList   3333


List.addAll()三

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

即addAll(Collection c)
   add(int index,Elelemt e)

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

addAll(Collection c)

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

C

包含要添加到此列表中的元素的 collection

return

如果此列表由于调用而发生更改,则返回 true

Throws

NullPointerException: 如果指定的 collection 为 null


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值