黑马程序员技术交流社区

标题: 求解Map集合创建还有entrySet方法时的内存情况 [打印本页]

作者: 郭阳    时间: 2012-9-24 13:48
标题: 求解Map集合创建还有entrySet方法时的内存情况
本帖最后由 郭阳 于 2012-9-25 13:41 编辑

HashMap<Student,Teacher> hm=new HashMap<Student,Teacher>();
                hm.put(new Student("student01",11),new Teacher("teacher01",21));
                hm.put(new Student("student02",12),new Teacher("teacher02",22));
                hm.put(new Student("student03",13),new Teacher("teacher03",23));
                Set<Map.Entry<Student,Teacher>> hs=hm.entrySet();
                Iterator<Map.Entry<Student,Teacher>>  it=hs.iterator();
                while(it.hasNext())
                {
                        Map.Entry<Student,Teacher> me=it.next();
                        Student s=me.getKey();
                        Teacher t=me.getValue()·········································}
----------------------------------------------------------------------------------------------------------------------------------------
谁能说说这段代码在堆栈中的情况啊
Map集合创建的时候,对象是先封装在Map.Entry对象中再存的还是?
Map.Entry对象me是一个引用吗?那他实体中存的是学生实体还是学生引用?




作者: 王贵朝    时间: 2012-9-24 14:10
Map.Entry<Student,Teacher> me=it.next(); 我觉得me是一个引用
Map.Entry对象me是一个引用吗?那他实体中存的是学生实体还是学生引用?//实体中存放的应该是键值对的关系,毕老师讲的那张结婚证书!!{:soso_e113:}
作者: 赵永康    时间: 2012-9-24 14:11
map.entry是map集合的一个内部类。对象应该存在map集合中,
map.entry存的是集合中元素的映射关系,就像结婚证一样,有了这关系,就能找到相应的人。然后同过这关系,上集合中直接找元素
因为内部类持有外部类的引用!我理解是这样的  还请各位指教
作者: 尤圣回    时间: 2012-9-24 14:29
[/这个就是和set集合类似的 map是set的扩展,把map的key-value看成一个整体,他就是set集合的key.同理获取key-value就用到entry 和set获取key是一样的
作者: 陈振兴    时间: 2012-9-24 16:15
1)栈与堆都是Java用来在Ram中存放数据的地方,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray等指令建立,它们不需要程序代码来显式的释放。
堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。(缺点是存取速度较慢)
最主要的就是栈数据可以共享的。
2)Map集合创建的时候,对象是以键值对的方式来存的,说明它就是一个整体。而Map.Entry它本身就是一个Set集合,它通过这个Set的键来取得Map中的value值速度会快,这个参见视频中讲到的存储图!
3)Map.Entry对象me是一个引用,就相当于一个集合,它把指针it.next()取到的数据放到me里面了.




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