A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王毛毛 黑马帝   /  2011-9-17 09:46  /  4023 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

// 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 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

9 个回复

倒序浏览
黑马网友  发表于 2011-9-17 10:28:15
沙发

回复 楼主 的帖子

HashSet集合和ArrayList集合的区别。他们最大的区别就在于HashSet集合用了Hash算法,向它里面存放对象的时候,它先要将存放对象和已经存入的对象使用hash算法比较一番,如果发现对象一致,就不予存放,通俗一点就是无法重复存放一个对象。而ArrayList正好和它相反,它可以存取相同的对象。

    还要注意一个很重要的概念:内存泄漏。如果将已存入HashSet的对象的值(前提是参与hash算法的值)进行修改后再移除,很可能造成内存泄漏。因为修改的值与hash算法有关,所以对其进行修改,相当于修改了这个对象的存放地点,以致于在移除时找不到该对象,而使其一直驻留在内存中,慢慢累积的话,就会造成内存泄露。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 不错!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-17 10:57:04
藤椅

回复 沙发 的帖子

很精辟,很透彻,谢谢程兄

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-17 11:54:49
板凳
你看视频不都说了吗
回复 使用道具 举报
黑马网友  发表于 2011-9-17 13:44:44
报纸

回复 藤椅 的帖子

:) 能帮到你我很高兴哈!
回复 使用道具 举报
黑马网友  发表于 2011-9-18 13:35:14
地板
你只要记住,ArrayList是可以重复存储的,HashSet是不可以重复存储的,也可以这样打个比方ArrayList相当于person对象中的name属性,而HashSet是person对象中的id属性(身份证),可以有多个叫张三的人,但不能有任意两个人的身份证号相同。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 加分鼓励!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-18 16:09:50
7#

回复 报纸 的帖子

哥俩真客气。:)
回复 使用道具 举报
黑马网友  发表于 2011-9-19 08:47:09
8#

回复 地板 的帖子

很好哦,学习了
回复 使用道具 举报
黑马网友  发表于 2011-9-20 22:35:55
9#
底层实现不一样,ArrayList底层是用数组实现的,而HashSet底层是用HashMap实现的。
回复 使用道具 举报
黑马网友  发表于 2011-9-21 16:58:06
10#

回复 楼主 的帖子

ArrayList里面存储的元素是按照我们添加元素的顺序有序的排列,其中的元素可以是重复的对象。
HashSet里面存储的元素并不是按照我们添加元素的顺序进行排列的,而是按照哈希值分别存储到不同的区域,其中的元素不能是重复的对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马