Map集合

概述

Map集合称为双列集合,格式:{key1 = value1 , key2 = value2 , key3 = value3,...},一次需要存一对数据做为一个元素

Map集合的每个元素"key = value"称为一个键值对/键值对对象/一个Entry对象,Map集合也被叫做"键值对集合"

Map集合的所有键都是不允许重复的,但值可以重复,键和值是一一对应的,每个键只能找到自己对应的值

Map集合在什么业务场景下使用

需要存储一一对应的数据时,就可以考虑使用Map集合来做

fb2fe2a9564f4421a063b0ef93815648.png

 

HashMap

        Map<String,Integer> map = new HashMap<>();//HashMap 无序 不重复 无索引
        map.put("手表",100);
        map.put("手表",200);//后面重复的数据会覆盖前面的数据
        map.put("手机",2);
        map.put("电脑",2);
        map.put(null,null);
        System.out.println(map);//{null=null, 手表=200, 电脑=2, 手机=2}
    

LinkedHashMap

        Map<String,Integer> map = new LinkedHashMap<>();//LinkedHashMap 有序 不重复 无索引
        map.put("手表",100);
        map.put("手表",200);//后面重复的数据会覆盖前面的数据
        map.put("手机",2);
        map.put("电脑",2);
        map.put(null,null);
        System.out.println(map);//{手表=200, 手机=2, 电脑=2, null=null}
    

TreeMap

        Map<Integer,String> map1 = new HashMap<>();//可排序 不重复 无索引
        map1.put(23,"java");
        map1.put(23,"MySQL");
        map1.put(19,"发卡");
        map1.put(78,"棉服");
        System.out.println(map1);//{19=发卡, 23=MySQL, 78=棉服}
    

Map的常用方法

为什么要先学习Map的常用方法?

Map是双列集合的祖宗,它的功能是全部双列集合都可以继承过来使用的

d0d5dd4889fb490494056fa3bc6e43b5.png

 

1,public int size():获取集合的大小

Map<String,Integer> map = new HashMap<>();
        map.put("手表",100);
        map.put("手表",200);//后面重复的数据会覆盖前面的数据
        map.put("手机",2);
        map.put("电脑",2);
        map.put(null,null);
        System.out.println(map);//{null=null,手表=200, 手机=2, 电脑=2}
        System.out.println(map.size());//4

2,public void clear(): 清空集合

        map.clear();
        System.out.println(map);//{}

3,public boolean isEmpty():判断集合是否为空,为空则返回true

System.out.println(map.isEmpty());//true

4,public V get(Object key):根据键获取对应值(不存在返回null)

System.out.println(map.get("手表"));//200

5,public V remove(Object key):根据键删除整个元素(删除键会返回键的值)

        System.out.println(map.remove("手机"));//2
        System.out.println(map);//{null=null, 手表=200, 电脑=2}

6,public boolean containsKey(Object key):判断是否包含某个键,包含返回true

System.out.println(map.containsKey("电脑"));//true

7,public boolean containsValue(Object value):判断是否包含某个值

System.out.println(map.containsValue(2));

8,public Set<K> keySet():获取Map集合的全部键

Set<String> keys = map.keySet();
System.out.println(keys);

System.out.println(map.keySet());//[null, 手表, 电脑]

9,public Collection<V> values():获取Map集合的全部值

Collection<Integer> values = map.values();
System.out.println(values);

System.out.println(map.values());//[null, 200, 2]

10,putAll 把其他Map集合的数据倒入自己集合中来

        Map<String,Integer> map1 = new HashMap<>();
        map1.put("java1",10);
        map1.put("java2",20);
        Map<String,Integer>map2 = new HashMap<>();
        map2.put("java3",10);
        map2.put("java2",222);
        map1.putAll(map2);
        System.out.println(map1);//{java3=10, java2=222, java1=10}
        System.out.println(map2);//{java3=10, java2=222}

Map的遍历方式

a2e04c93ffc84a229f4a30a1e954b409.png

 

第一种方式:

637056baf99a464bbfc098237bd01de8.png

 

import java.util.*;

public class Work1 {
    public static void main(String[] args) {
        Map<String,Double> map = new HashMap<>();
        map.put("简隋英",188.5);
        map.put("邵群",188.7);
        map.put("宋居寒",190.3);
        map.put("宫应弦",189.4);
        map.put("洛羿",188.8);
        System.out.println(map);
        //1,获取Map集合的全部键
        Set<String> keys = map.keySet();
        //2,遍历全部的键,根据键获取其对应的值
        for (String key : keys) {
            //根据键获取其对应的值
            Double value = map.get(key);
            System.out.println(key+"=>"+value);
        }
    }
}

第二种遍历方式:

f202e6921b694666b258a823f62b9b5e.png

 

import java.util.*;

public class Work1 {
    public static void main(String[] args) {
        Map<String,Double> map = new HashMap<>();
        map.put("简隋英",188.5);
        map.put("邵群",188.7);
        map.put("宋居寒",190.3);
        map.put("宫应弦",189.4);
        map.put("洛羿",188.8);
        System.out.println(map);//{简隋英=188.5, 洛羿=188.8, 宋居寒=190.3, 邵群=188.7, 宫应弦=189.4}
        //1,调用Map集合提供的entrySet方法,把Map集合转换成键值对类型的Set集合
        Set<Map.Entry<String, Double>> entries = map.entrySet();
        //entries = [(简隋英=188.5), (洛羿=188.8), (宋居寒=190.3), (邵群=188.7), (宫应弦=189.4)]
        for (Map.Entry<String, Double> entry : entries) {
            String key = entry.getKey();
            Double value = entry.getValue();
            System.out.println(key+"=>"+value);

        }
    }
}

第三种遍历方式:

edb77f6ea3f442d59801edeb0c47173e.png

 

import java.util.*;

public class Work1 {
    public static void main(String[] args) {
        Map<String,Double> map = new HashMap<>();
        map.put("简隋英",188.5);
        map.put("邵群",188.7);
        map.put("宋居寒",190.3);
        map.put("宫应弦",189.4);
        map.put("洛羿",188.8);
        System.out.println(map);//{简隋英=188.5, 洛羿=188.8, 宋居寒=190.3, 邵群=188.7, 宫应弦=189.4}

        map.forEach((k,v)->{
            System.out.println(k+"->"+v);
        });
    }
}

集合的嵌套

import java.util.*;

public class Work1 {
    public static void main(String[] args) {
        Map<String,List<String>> map = new HashMap<>();
        List<String> cities1 = new ArrayList<>();
        Collections.addAll(cities1,"南京市","扬州市","苏州市","无锡市","常州市");
        map.put("江苏省",cities1);
        //System.out.println(map);

        List<String> cities2 = new ArrayList<>();
        Collections.addAll(cities2,"武汉市","孝感市","十堰市","宜昌市","鄂州市");
        map.put("湖北省",cities2);
        //System.out.println(map);

        List<String> cities3 = new ArrayList<>();
        Collections.addAll(cities3,"石家庄市","唐三市","邢台市","保定市","张家口市");
        map.put("河北省",cities2);
        System.out.println(map);

        //获取某个省份的信息
        List<String> cities = map.get("湖北省");
        for (String city : cities) {
            System.out.println(city);
        }
        //获取全部省份的信息
        map.forEach((p,c)->{
            System.out.println(p+"->"+c);
        });
    }
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值