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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 班志国 中级黑马   /  2012-10-24 19:48  /  2052 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 班志国 于 2012-10-25 10:50 编辑


求解 红色 区域在内存中 是怎么存的

评分

参与人数 1黑马币 +12 收起 理由
谭立文 + 12

查看全部评分

5 个回复

倒序浏览
内存会先给set集合分配一个可变化的内存空间大小,当你添加元素的时候会直接把对象的值添加到这块内存区域内
回复 使用道具 举报
当你new一个person类的时候堆内存中就会有一个相应的对象,你使用的ADD方法应该会将这个对象的地址存入到集合中,通过这样来建立联系
回复 使用道具 举报
内存结构应该是这样的。。。

未命名.JPG (48.05 KB, 下载次数: 23)

未命名.JPG

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1

查看全部评分

回复 使用道具 举报
HashSet类实现了set集合接口,存放于该集合类中的对象不按特定的方式排序,只是简单地把对象加入集合中类似于向口袋里放东西。对集合中存放的对象的访问和操作是通过对象的引用进行的,所以在集合中不能存放重复的对象。set集合中的对象必须重新实现equals()和hashCode()方法。HashSet就是采用哈希算法存取对象的集合,它内部采用对某个数字n进行取余的方式对哈希码进行分组和划分对象的存储区域。Object类中定义了一个hashCode()方法来返回每个Java对象的哈希码,当从HashSet集合中查找某个对象时,java系统首先调用对象的hashCode()方法获得该对象的哈希码。然后根据哈希码找到相应的存储区域,最后取出该存储区域内的每个元素于该对象进行equals()方法比较,这样不用遍历集合中的所有元素就可以得到结论。可见,hashSet集合具有很好的对象检索性能,但是,HashSest集合存储对象的效率相对较低   (非原创,摘之于http://blog.csdn.net/qiufeng6928377/article/details/7293660,讲的很透彻了)

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
简单点说吧,当你new Person();的时候,会在堆内存中开辟一块内存,同时也会有一个内存地址值,HashSet在new一个对象时也会开辟一块内存,然后将这些地址值存入到这块内存中
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马