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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘佳 中级黑马   /  2012-9-4 16:39  /  1501 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘佳 于 2012-9-5 19:35 编辑

Set<Map.Entry<Student,String>> entrySet = hm.entrySet();
不太理解这句代码,<>中放入的是引入数据类型,这个里面怎么还有方法呢?

7 个回复

倒序浏览
Entry是Map的一个内部接口,不是Map的一个方法。
回复 使用道具 举报
赵云柯 发表于 2012-9-4 16:45
Entry是Map的一个内部接口,不是Map的一个方法。

为什么要这样使用呢?
回复 使用道具 举报
这是Map集合的另外一种取出方式

将Map集合中的映射关系存入到Set集合,这个关系的数据类型是Map.Entry

而Set具有迭代器。用迭代方式取出所有的Map.Entry对象,再根据Map.Entry的getKey和getValue方法,获取关系中的键和值

评分

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

查看全部评分

回复 使用道具 举报
Set<Map.Entry<K,V>> entrySet()返回此映射中包含的映射关系的 set 视图。返回的 set 中的每个元素都是一个 Map.Entry。该 set 受映射支持,所以对映射的改变可在此 set 中反映出来,反之亦然。如果修改映射的同时正在对该 set 进行迭代(除了通过迭代器自己的 remove 操作,或者通过在迭代器返回的映射项上执行 setValue 操作外),则迭代结果是不明确的。set 支持通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作实现元素移除,即从映射中移除相应的映射关系。它不支持 add 或 addAll 操作

  楼上说的很对的:
再给你一个例子,你执行一下,看看就明白了:
      public class MapTest {
        public static void main(String[] args) {
                Map<String, Student> map = new HashMap<String, Student>();

                Student s1 = new Student("许文强", 20);
                Student s2 = new Student("丁力", 30);
                Student s3 = new Student("冯程程", 25);

                map.put("sh002", s1);
                map.put("sh003", s2);
                map.put("sh001", s3);

                // 遍历
                Set<String> keySet = map.keySet();
                Iterator<String> it = keySet.iterator();
                while (it.hasNext()) {
                        String key = it.next();
                        Student value = map.get(key);
                        System.out.println(key + "***" + value.getName() + "***"
                                        + value.getAge());
                }

                System.out.println("*******************");

                Set<Map.Entry<String, Student>> setMap = map.entrySet();
                Iterator<Map.Entry<String, Student>> it2 = setMap.iterator();
                while (it2.hasNext()) {
                        Map.Entry<String, Student> me = it2.next();
                        String key = me.getKey();
                        Student value = me.getValue();
                        System.out.println(key + "***" + value.getName() + "***"
                                        + value.getAge());
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
赵云柯 发表于 2012-9-4 16:55
这是Map集合的另外一种取出方式

将Map集合中的映射关系存入到Set集合,这个关系的数据类型是Map.Entry

Map.Entry是Java的引用数据类型之一吗?
回复 使用道具 举报
刘佳 发表于 2012-9-4 18:04
Map.Entry是Java的引用数据类型之一吗?

是的     
回复 使用道具 举报
hm是HashMap对象吧,HashMap类有entrySet()方法,返回的是Set<Map.Entry<?,?>>的Set接口实例,该Set接口实例存放的数据是Map.Entry<?,?>>接口实例,Map.Entry接口是Map接口的子接口.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马