List使用总结

来源:互联网 发布:唐之语淘宝旗航店旗袍 编辑:程序博客网 时间:2024/04/29 08:29

 今天在开发过程中,用到List集合。在使用过程中,获取其中某个对象,并对对象的属性值进行修改,虽然没有将修改后对象add回去,然而list中的该对象值还是修改了。以前没注意过这个问题现在做个总结:

 理解1:  List属于java集合,Java集合中不能存放基本类型数据,只能存放对象的引用,即对象在内存中的地址,你把某个对象的引用存放到List中,相当于你把某街道某栋楼某房间号(比如说,海淀区上地环岛东金隅嘉华E座2层301)告诉了快递员,快递员会记住这个地址,而这个在地址办公的人或单位走了以后,这个地址还是有效的,然后快递员再来这个地址就会跟新来的办公的人接触,打交道。

深入理解:ArrayList的底层数据结构是数组,它存放的是元素的地址。ArrayList的元素有角标,对元素的操作本质上跟数组的一样。list.add(p)是将Person对象p的地址存入了数组,p一旦被初始化后他的地址就不会改变了,并在内存中开辟一段空间用于存放自己内部的数据。当你修改了p对象内部的内容时,只是修改p内部存放的内容,并没有修改p的地址,list存放的地址也没变,当你从list中读取p的时候,系统会去读取list中存储的指向对象p的那段地址空间里的内容,即p对象修改后的内容。也就是说还是p对象那段内存空间,只是里边的内容变了,所以读取p的时候是修改后的内容。