黑马程序员技术交流社区

标题: ArrayList和HashSet存储原理 [打印本页]

作者: 王毛毛    时间: 2011-9-17 09:46
标题: ArrayList和HashSet存储原理
// Collection collections=new ArrayList();
                  Collection collections2=new HashSet();
                 ReflectPoint pt1=new ReflectPoint(2,2);
                 ReflectPoint pt2=new ReflectPoint(3,3);
                 ReflectPoint pt3=new ReflectPoint(5,5);
                 collections.add(pt1);
                 collections.add(pt2);
                 collections.add(pt3);
                 collections.add(pt1);
            
                   //System.out.println(collections2.size());
                 System.out.println(collections.size());
若用ArrayList打印的值为4,若用hashset这打印值为3,求他们的内部原理及储存过程?
[ 本帖最后由 王毛毛 于 2011-09-17  10:05 编辑 ]
作者: 匿名    时间: 2011-9-17 10:28
标题: 回复 楼主 的帖子
HashSet集合和ArrayList集合的区别。他们最大的区别就在于HashSet集合用了Hash算法,向它里面存放对象的时候,它先要将存放对象和已经存入的对象使用hash算法比较一番,如果发现对象一致,就不予存放,通俗一点就是无法重复存放一个对象。而ArrayList正好和它相反,它可以存取相同的对象。

    还要注意一个很重要的概念:内存泄漏。如果将已存入HashSet的对象的值(前提是参与hash算法的值)进行修改后再移除,很可能造成内存泄漏。因为修改的值与hash算法有关,所以对其进行修改,相当于修改了这个对象的存放地点,以致于在移除时找不到该对象,而使其一直驻留在内存中,慢慢累积的话,就会造成内存泄露。
作者: 匿名    时间: 2011-9-17 10:57
标题: 回复 沙发 的帖子
很精辟,很透彻,谢谢程兄
作者: 匿名    时间: 2011-9-17 11:54
你看视频不都说了吗
作者: 匿名    时间: 2011-9-17 13:44
标题: 回复 藤椅 的帖子
:) 能帮到你我很高兴哈!
作者: 匿名    时间: 2011-9-18 13:35
你只要记住,ArrayList是可以重复存储的,HashSet是不可以重复存储的,也可以这样打个比方ArrayList相当于person对象中的name属性,而HashSet是person对象中的id属性(身份证),可以有多个叫张三的人,但不能有任意两个人的身份证号相同。
作者: 匿名    时间: 2011-9-18 16:09
标题: 回复 报纸 的帖子
哥俩真客气。:)
作者: 匿名    时间: 2011-9-19 08:47
标题: 回复 地板 的帖子
很好哦,学习了
作者: 匿名    时间: 2011-9-20 22:35
底层实现不一样,ArrayList底层是用数组实现的,而HashSet底层是用HashMap实现的。
作者: 匿名    时间: 2011-9-21 16:58
标题: 回复 楼主 的帖子
ArrayList里面存储的元素是按照我们添加元素的顺序有序的排列,其中的元素可以是重复的对象。
HashSet里面存储的元素并不是按照我们添加元素的顺序进行排列的,而是按照哈希值分别存储到不同的区域,其中的元素不能是重复的对象。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2