JAVA Map 遍历Map 集合 map 的嵌套

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40990836/article/details/78868101

一、 Map

  1. 数据保存 是以 键值对形势 存储的(key – value)
  2. 键是唯一的(不能重复的)

HashSet 和 HashMap 之间的关系

HashSet 底层实现 实际上就是一个HashMap
HashSet 是依赖 HashMap 的
在向HashSet 中添加的值 相当于往Map 中添加到Key 的位置

HashSet 和 TreeSet

去重 排序 相当于 是对map 的键去操作
HashSet 去重复: 重写HashCode() 和 equals () 方法
HashSet 去重复: 重写HashCode() 和 equals () 方法

// 添加 
public static void fun1(){
    // key键  人名
    // value  年龄
    Map<String , Integer> map = new HashMap<>();
    //  保存键值对
    //  添加键值对方法的返回值  返回的是被覆盖的值的部分
    Integer num1 = map.put("张三", 18);
    Integer num2 = map.put("李四", 22);
    Integer num3 = map.put("王五", 31);
    Integer num4 = map.put("赵六", 11);
    //  测试 添加方法的返回值
    Integer num5 = map.put("张三", 250);
    System.out.println(num5);
    System.out.println(num1);
    System.out.println(num2);
    System.out.println(num3);
    System.out.println(num4);

    //  打印 map  只有四对键值对
    System.out.println(map);
}
public static void fun2() {
        /*
         * 测试
         * clear()
         * containsKey(Object key)
         * containsValue(Object value) 
         * isEmpty() 
         * remove(Object key)
         * size() 
         */
        Map<String, Integer> map = new HashMap<>();
        //  添加 put
        Integer num1 = map.put("张三", 18);
        Integer num2 = map.put("李四", 22);
        Integer num3 = map.put("王五", 31);
        Integer num4 = map.put("赵六", 11);
        //  删除的返回值,是删除的这个键对应的  值
        Integer remove = map.remove("李四");
        //  是否包含这个key
        System.out.println(map.containsKey("张三"));
        //  是否包含这个value
        System.out.println(map.containsValue(18));
        //  这个map 集合  是不是 空
        System.out.println(map.isEmpty());
        //  删除一个元素 (因为键是唯一的,所以根据键来删除)
        System.out.println(map.remove("李四"));
        //  map 集合 的键值对 对数
        System.out.println(map.size());
        map.clear();
        System.out.println(map);
    }
    public static void fun3() {
        //  创建map  集合  key 保存 学生 value 保存 学生的户籍
        Map<Student, String> map = new HashMap<>();
        map.put(new Student("王龙",18), "北京");
        map.put(new Student("徐涵涵",23), "无锡");
        map.put(new Student("高松松",20), "徐州");
        map.put(new Student("王龙",18), "上海");
        //  为什么打印出来的是保留 上海的王龙
        //  键不会重复保存  但是 值会覆盖上一个值
        System.out.println(map);
    }

遍历Map 集合

        //  遍历Map 
        HashMap<String, Integer> map = new HashMap<>();
        map.put("高松松", 18);
        map.put("刘国强", 19);
        map.put("谢伟峰", 14);
        map.put("李彦奇", 15);
        //  将map 集合 转换成集合
        Set<String> keySet = map.keySet();
        //  获取keySet的迭代器
        Iterator<String> iterator = keySet.iterator();
        while (iterator.hasNext()) {
            //  获取下一个元素
            String next = iterator.next();
            //  通过key 值 获取 value
            Integer integer = map.get(next);
            System.out.println(next + " = " + integer);
        }
    }
    public static void fun2() {
        // 使用增强  for  循环遍历
        //  遍历Map 
        HashMap<String, Integer> map = new HashMap<>();
        map.put("高松松", 18);
        map.put("刘国强", 19);
        map.put("谢伟峰", 14);
        map.put("李彦奇", 15);
        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            // 通过key 获取 value 值
            Integer integer = map.get(key);
            System.out.println(key + " = " + integer);
        }
    }
    public static void fun3() {
    // entrySet();
    // 该方法返回是一个集合 集合中 存储的时一个一个键值对对象
    // Entry 对象 中 保存了 key 和 value
    // 利用该方法遍历
    HashMap<String, Integer> map = new HashMap<>();
    map.put("高松松", 18);
    map.put("刘国强", 19);
    map.put("谢伟峰", 14);
    map.put("李彦奇", 15);
    // 将map 集合 转换为 set 集合
    Set<Entry<String, Integer>> entrySet = map.entrySet();
    // 获取 转换后集合的 迭代器
    Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
    // 判断是否还有下一个元素
    while (iterator.hasNext()) {
        // 下一个元素(对象)
        Entry<String, Integer> next = iterator.next();
        // 将对象中的value 值 取出来
        Integer value = next.getValue();
        // 将对象中的 key 值 取出
        String key = next.getKey();

        // 通过获取到的key 值 获取 Value
        // Integer integer = map.get(next);
        // 打印

    }
}
public static void fun4() {
    //  利用entrySet() 方法  增强for 循环遍历
    HashMap<String, Integer> map = new HashMap<>();
    map.put("高松松", 18);
    map.put("刘国强", 19);
    map.put("谢伟峰", 14);
    map.put("李彦奇", 15);
    //  将map 集合 转换成一个entry 集合
    Set<Entry<String, Integer>> entrySet = map.entrySet();
    for (Entry<String, Integer> entry : entrySet) {
        //  通过遍历出来的元素   getValue 获取value 值 
        Integer value = entry.getValue();
        //  getKey  获取key 值
        String key = entry.getKey();
        System.out.println(key + value);
        }
    }

map 的嵌套

public static void main(String[] args) {
        /*
         * Java学科 
         * java 1班级  ---  保存学生  和  户籍
         * java 2班级  ---  保存学生  和  户籍
         * 
         * 1班  也是个 map 
         * 保存 ---  学生 户籍
         * Java学科 是一个map 
         * 保存了两个键值对  1班  和  2班
         */
        //  创建一个学科集合
        HashMap<HashMap<Person, String>, Integer> map = new HashMap<>();
        //  创建一个 一班集合
        HashMap<Person, String> c1 = new HashMap<>();
        c1.put(new Person("高松松",18),"徐州" );
        c1.put(new Person("董苏岩",18),"丰县" );
        //  创建一个  二班集合  添加两个人
        HashMap<Person, String> c2 = new HashMap<>();
        c2.put(new Person("菲菲",15), "盐城");
        c2.put(new Person("嘿嘿",16),"如皋");
        map.put(c1, 1);
        map.put(c2, 2);
        //  将map 集合转换为set 集合
        Set<HashMap<Person, String>> keySet = map.keySet();
        //  获取 KeySet 的迭代器
        Iterator<HashMap<Person, String>> m1 = keySet.iterator();
        //  判断 循环
        while (m1.hasNext()) {
            //  获取的是 大集合中的两个小map 集合
            HashMap<Person, String> class1 = m1.next();
            //  将子map 集合  转换为set 集合
            Set<Person> cset = class1.keySet();
            //  获取 cset 的迭代器
            Iterator<Person> csetItera = cset.iterator();
            //  循环 判断
            while (csetItera.hasNext()) {
                //  获取 子集合中 key值
                Person p = csetItera.next();
                //   通过key 值 获取value
                String string = class1.get(p);
                //  打印  结果
                System.out.println( p + " == " + string);

            }

        }
    }

猜你喜欢

转载自blog.csdn.net/qq_40990836/article/details/78868101