Java学习--Map

介绍

  • Map用于保存具有映射关系的数据 key-value
  • Map 中的 key和value可以是任何引用类型的数据,会封装到HashMap$Node 中
  • Map中的key不可以重复, Map中的value可以重复
  • Map中的key和value可以为null 常用String作为key
  • key和value之间存在着一一对应关系,通过指定的key总能找到对应的value

Map底层

//1. k-v 最后是 HashMap$Node node = newNode(hash, key, value, null)
//2. k-v 为了方便程序员的遍历,还会创建 EntrySet 集合,
//	该集合存放的元素类型 Entry,而一个Entry对象就有k,v
//3. 在entryset中,定义的类型是 Map.Entry,但是实际上存放的还是HashMap$Node
//   这是因为 static class Node<K,V> implements Map.Entry<K,V>
//4. 当把 HashMap$Node 对象存放到 entryset 就方便我们的遍历,
//	因为 Map.Entry 提供了重要的方法 K getKey();  V getValue();

        Set set = map.entrySet();
        System.out.println(set.getClass()); //HashMap$EntrySet

        for (Object obj : set) {
            // System.out.println(obj.getClass()); //HashMap$Node
            //为了从HashMap$Node取出k-v
            //先做向下转型
            Map.Entry entry = (Map.Entry) obj;
            System.out.println(entry.getKey() + "-" + entry.getValue());
        }

在这里插入图片描述

Map的循环

第一组:先取出所有的key 使用keySet()

		//(1)增强for
        System.out.println("----------第一种方式----------");
        for (Object key : keySet) {
            System.out.println(key + "-" + map.get(key));
        }
        //(2)迭代器
        System.out.println("----------第二种方式----------");
        Iterator iterator = keySet.iterator();
        while (iterator.hasNext()) {
            Object key = iterator.next();
            System.out.println(key + "-" + map.get(key));
        }

把所有的values取出 使用map.values()

		//(1)增强for
        System.out.println("----------第一种方式----------");
        for (Object value : values) {
            System.out.println(value);
        }
        //(2)迭代器
        System.out.println("----------第二种方式----------");
        Iterator iterator1 = values.iterator();
        while (iterator1.hasNext()) {
            Object value = iterator1.next();
            System.out.println(value);
        }

通过map.entrySet()来获取k-v

		//1.增强for
        System.out.println("----------第一种方式----------");
        for (Object entry : entrySet) {
            // System.out.println(entry.getClass());  //HashMap$Node
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey() + "-" + m.getValue());
        }
        //(2)迭代器
        System.out.println("----------第二种方式----------");
        Iterator iterator2 = entrySet.iterator();
        while (iterator2.hasNext()) {
            Object entery = iterator2.next();
            //向下转型
            Map.Entry m = (Map.Entry) entery;
            System.out.println(m.getKey() + "-" + m.getValue());
        }

如何选择集合

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值