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

© 李柯 中级黑马   /  2012-3-28 13:02  /  3537 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家如何理解Map集合中的entry?

6 个回复

正序浏览
public static void work(Map<String, Student> map) {
        Collection<Student> c = map.values();
        Iterator it = c.iterator();
        for (; it.hasNext();) {
            System.out.println(it.next());
        }
    }
  //利用keyset进行遍历,它的优点在于可以根据你所想要的key值得到你想要的 values,更具灵活性!!
    public static void workByKeySet(Map<String, Student> map) {
        Set<String> key = map.keySet();
        for (Iterator it = key.iterator(); it.hasNext();) {
            String s = (String) it.next();
            System.out.println(map.get(s));
        }
    }
  //比较复杂的一种遍历在这里,呵呵~~他很暴力哦,它的灵活性太强了,想得到什么就能得到什么~~
    public static void workByEntry(Map<String, Student> map) {
        Set<Map.Entry<String, Student>> set = map.entrySet();
        for (Iterator<Map.Entry<String, Student>> it = set.iterator(); it.hasNext();) {
            Map.Entry<String, Student> entry = (Map.Entry<String, Student>) it.next();
            System.out.println(entry.getKey() + "--->" + entry.getValue());
        }
    }
}
回复 使用道具 举报
自从把Map.Entry当成一个类后,我对map集合的理解比以前清楚多了
回复 使用道具 举报
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;


public class EnitySetMap {
        public static void main(String[] args) {
                Map map=new HashMap();
               
                map.put("asdf",1);
                map.put("ggw",2);
                  //将Map转换为Map.Entry
            Set set=map.entrySet();
            //为了能让集合能按照值进行排列,这里把集合set转为Map.Entry类型的数组。
            Map.Entry[]  entries=(Map.Entry[]) set.toArray(new Map.Entry[set.size()] );
            //按照指定的比较器和指定的排序规则对集合里的Map.Entry进行排序,这里是按照值从小到大的排序。
            Arrays.sort(entries, new Comparator(){
                    @Override
                    public int compare(Object o1, Object o2) {
                             Integer value1=(Integer) ((Map.Entry)o1).getValue();
                             Integer value2=(Integer) ((Map.Entry)o2).getValue();
                             return value1.compareTo(value2);
                    }
                   
            });
            for(Map.Entry m:entries)
            {
                    System.out.println(m.getValue());
            }
        }
  
}
回复 使用道具 举报
Map 是一个接口, Entry也是一个接口  只不过这个接口是在Map类中定义的 而且该内部接口还是一个static的接口  所以可以直接用Map.Entry调用Entry接口中的方法
  之所以把Entry接口定义在Map接口中 是因为在取map集合中的元素时可以直接访问到     
  还有就是 entrySet方法返回 Map 键和值所对应的关系  把这种关心封装成对象 并转换到Set集合中 所以就可以使用迭代器取出其中的关系对象(元素) 在通过
   getKey 和getValue获取键和值
回复 使用道具 举报
entrySet方法返回 Map 中所包含映射的 Set 视图。 Set 中的每个元素都是一个 Map.Entry 对象,可以使用 getKey() 和 getValue() 方法访问Map中的的键元素和值元素
回复 使用道具 举报
entry表示一组的意思  表示键值对的形式    而keyset表示的只是一个key,要想获取另一半要通过get(key)得到另一半.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马