2021-09-27 查找表Map详解:

本文详细介绍了Java中Map接口及其常用实现类HashMap、TreeMap和HashTable的区别。Map作为一个多行两列的表格,存储键值对数据,key不允许重复。文章列举了Map的关键方法如put、size、get、remove、containsKey和containsValue,并强调了遍历Map的三种方式:keySet、entrySet和values。此外,还提醒在处理Map时注意value类型的接收问题,以防止空指针异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一、java.util.Map

Map在java中是一种非常常用的数据结构。它体现的结构是一个多行两列的表格,其中左侧的称为key,右侧的称为value。

Map总是成对保存数据,并且总是根据key获得对应的value。因此我们可以将查询的条件作为key,查询对应的结果作为value保存到Map中。

Map有一个要求:key不允许重复(根据key自身的equals方法比较判定)

java.util.Map是所有Map的顶级接口,规定了Map的相关功能。

1、常用实现类及区别:

java.util.HashMap:称为散列表,是使用散列算法实现的Map,是当今查询速度最快的数据结构,允许使用null(key和value都可以为null)。

java.util.TreeMap:使用红黑树实现的Map,不允许使用null(key和value均不能为null)

java.util.HashTable:与HashMap大致相同,但是线程安全,不允许使用null。

2、常用方法:

1、[V] put(K k,V v):

将给定的键值对存入Map,由于Map要求key不允许重复,若使用已有的key存入value

时则为替换操作,返回值为旧value,否则返回值为null。

2、[int] size():

获取Map的元素个数,每组键值对算一组元素。

3、[V] get(Object k):

根据给定的key值获取对应的value。如果给定的key不存在,则返回值为null。

4、[V] remove(Object k):

删除当前Map中给定的key所对应的键值,返回值为这个key对应的value

5、[boolean] containsKey(Object k):

判断当前的map是否包含给定的key值

6、[boolean] containsValue(Object v):

判断当前的map是否包含给定的value值。

如果Map的value是包装类类型时,在接收value值的时候一定要用包装类类型的变量接收,

不要使用对应的基本类型变量接收。避免因为自动拆装箱出现空指针异常。

3、Map的遍历

以下列代码为例:

        Map<String,Integer> map = new HashMap<>();
        map.put("语文",97);
        map.put("数学",98);
        map.put("英语",99);
        map.put("体育",60);
        System.out.println(map);

1、遍历所有的key:[Set<K>集合] keySet() 

将当前Map中所有的key以一个Set集合的形式返回。遍历该集合等同于遍历Map中所有的key

        Set<String> keySet = map.keySet();
        System.out.println(keySet);//[体育, 数学, 语文, 英语]
        for (String key: keySet) {
            System.out.println("key="+key);
        }
        keySet.forEach(k -> System.out.println(k));

2、遍历所有的键值对:[Set<Entry>] entrySet()

将当前Map中的每一组键值对以若干个Entry实例保存,并且存入一个Set集合后返回。

java.util.Map.Entry该接口的每一个实例用于表示Map中的一组键值对,该类提供了两个常用方法:[K] getKey() 、[V] getValue()

        Set<Map.Entry<String, Integer>> me = map.entrySet();
        System.out.println(me);//[体育=60, 数学=98, 语文=97, 英语=99]
        for (Map.Entry<String,Integer> mey: me) {
            System.out.println(mey);
            System.out.println("key:"+mey.getKey()+"|value:"+mey.getValue());
        }
        //JDK8之后,Map也提供了forEach()方法,用lambda表达式遍历
        map.forEach((k,v)-> System.out.println(k+":"+v));

3、遍历所有的value:[Collection<V>] values(): 

将当前的Map中的所有value以一个集合形式返回

        Collection<Integer> values = map.values();
        System.out.println(values);//[60, 98, 97, 99]
        for (Integer score: values) {
            System.out.println(score);
        }
        values.forEach(score -> System.out.println("分数为:"+score));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值