栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Map详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Map详解

Map详解 Map接口的实现类的特点[很实用]

注意:这里讲的是JDK8的Map接口特点

  • Map集合用于保存具有映射关系的数据:Key-Value(双列元素)

  • Map中的 key 和 value 可以是任何引用类型的数据,会封装到HashMap$Node对象中

  • Map中的key不允许重复,原因和HashSet一样

  • Map中的value可以重复

  • Map中的key可以为null,value也可以为null,注意key只能有一个null,value可以有多个null

  • 常用String类作为Map的key

  • key 与 value 之间存在单向一对一的关系,即通过指定的 key 总能找到对应的 value


public class Demo01 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("no1","韩顺平");
        map.put("no2","周杰伦");

        System.out.println("map="+map);
    }
}

  • Map中的 key 和 value 可以是任何引用类型的数据,会封装到HashMap$Node对象中

  • 当有相同的 k 时,就等价于替换

public class Demo01 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("no1","韩顺平");
        map.put("no2","周杰伦");
        map.put("no1", "张三丰");

        System.out.println("map="+map);
    }
}

  • Map中的 value 可以重复

public class Demo01 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("no1","韩顺平");
        map.put("no2","周杰伦");
        map.put("no1", "张三丰");
        map.put("no3", "张三丰");
        
        System.out.println("map="+map);
    }
}

  • key只能有一个null,value可以有多个null

public class Demo01 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put(null,null);
        map.put(null, "abc"); //相当于替换
        map.put("no2", null);
        map.put("no3", null);
        
        System.out.println("map="+map);
    }
}

  • 通过 get() 方法,传入 key ,会返回对应的 value

public class Demo01 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("no1","韩顺平");
        map.put("no2","周杰伦");
        map.put("no1", "张三丰");
        map.put("no3", "张三丰");

        System.out.println(map.get("no2"));
    }
}

Map中的一对 k-v 是放在一个HashMap$Node中的,又因为Node实现了 Entry 接口,有些书上也说一对 k-y 就是一个Entry
  • k-v 会封装到 HashMap$Node对象中 ,通过 newNode(hash, key, value, null); 存放的

  • HashMap中的静态内部类 Node

//实现的是Map接口中的Entry接口
static class Node implements Map.Entry
  • k-v 为了方便程序员的遍历,还会创建 EntrySet集合,该集合存放的元素的类型是 Entry,而一个Entry对象就有k-v,EntrySet>

 //HashMap中的内部类
 final class EntrySet extends AbstractSet> {
  • entrySet中,定义的类型是Map.Entry,但是实际上存放的还是 HashMap$Node,这是因为 static class Node implements Map.Entry

transient Set> entrySet;
  • 当把 HashMap$Node 对象存放到 entrySet中,就方便了我们的遍历,因为 Map.Entry 提供了重要的方法:例如 K getKey();  V getValue();  V setValue(V value)

public class Demo01 {
    public static void main(String[] args) {
        Map map = new HashMap();

        map.put("no1","韩顺平");
        map.put("no2","周杰伦");

        Set set = map.entrySet();

        System.out.println(set.getClass());
        System.out.println("============");

        for (Object obj : set) {
            System.out.println(obj.getClass());

            //向下转型取出 k-v
            Map.Entry entry = (Map.Entry)obj;

            System.out.println(entry.getKey()+"-"+entry.getValue());
        }
    }
}

 

 

  • 执行 Set set = map.entrySet();

    public Set> entrySet() {
        Set> es;
        return (es = entrySet) == null ? (entrySet = new EntrySet()) : es;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/830649.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号