黑马程序员技术交流社区

标题: 求解 [打印本页]

作者: 班志国    时间: 2012-10-24 19:48
标题: 求解
本帖最后由 班志国 于 2012-10-25 10:50 编辑


求解 红色 区域在内存中 是怎么存的
作者: 唐进    时间: 2012-10-24 20:33
内存会先给set集合分配一个可变化的内存空间大小,当你添加元素的时候会直接把对象的值添加到这块内存区域内
作者: 毛标    时间: 2012-10-24 20:57
当你new一个person类的时候堆内存中就会有一个相应的对象,你使用的ADD方法应该会将这个对象的地址存入到集合中,通过这样来建立联系
作者: 鲁中需    时间: 2012-10-24 21:01
内存结构应该是这样的。。。

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

未命名.JPG

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




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