共同学习Java源代码-数据结构-Map接口

本文详细介绍了Java中Map接口的基本方法,包括添加、获取、删除键值对等操作,并深入探讨了1.8版本后新增的实用方法如getOrDefault、putIfAbsent等。

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

public interface Map<K,V>

这个接口比较简单,除了声明泛型键值对,没什么别的。


 int size();

这个方法返回实现类的长度


boolean isEmpty();

这个方法返回实现类是否为空


boolean containsKey(Object key);

这个方法判断map里是否含有某个键。


V get(Object key);

这个方法是获取键值的方法。


V put(K key, V value);

这个方法是向map中添加键值对的方法。


V remove(Object key);

这个方法是删除键值对的方法。


void putAll(Map<? extends K, ? extends V> m);

这个方法是将参数map中的所有键值对添加到本map中。


void clear();

这个方法是清空map的方法。


Set<K> keySet();

这个方法是返回键集合的方法。


Collection<V> values();

这个方法是返回值集合的方法。


Set<Map.Entry<K, V>> entrySet();

这个方法是返回键值对集合的方法。


interface Entry<K,V> {

这是键值对的内部接口。


K getKey();

这个方法是获取键的方法。


V getValue();

这个方法是获取值的方法。


V setValue(V value);

这个方法是设置值的方法。


boolean equals(Object o);

这个方法是判断equals方法。


int hashCode();

这个是返回hashCode的方法。

这个接口里还有一些1.8之后和lambda表达式相关的方法,这里先不说了。


然后继续看Map接口的方法,equals和hashCode方法就省略了。


    default V getOrDefault(Object key, V defaultValue) {
        V v;
        return (((v = get(key)) != null) || containsKey(key))
            ? v
            : defaultValue;
    }

加了default关键字,就可以在接口中实现具体的方法。

这个方法是用来获取值,但如果不存在值就返回默认值的方法。

首先创建值的泛型对象v,然后将get方法返回值赋给v,如果复制后的v不为空或containsKey方法为true,就将v返回,否则返回默认值,也就是第二个参数。


    default V putIfAbsent(K key, V value) {
        V v = get(key);
        if (v == null) {
            v = put(key, value);
        }


        return v;
    }

这个方法是如果不存在键值对,就插入的方法。

首先先通过get方法获取key对应的值。如果值为空,就调用put方法,将新值返回。


    default boolean remove(Object key, Object value) {
        Object curValue = get(key);
        if (!Objects.equals(curValue, value) ||
            (curValue == null && !containsKey(key))) {
            return false;
        }
        remove(key);
        return true;
    }

这个方法是先判断后删除元素的方法,首先通过get方法获取值,然后通过Objects类的方法判断刚获取到的值和第二个参数是否equals,如果不equals,或者刚获取到的值为空且map中不包含这个key,就返回false。

否则调用remove方法,删掉这个key,并返回true。


    default boolean replace(K key, V oldValue, V newValue) {
        Object curValue = get(key);
        if (!Objects.equals(curValue, oldValue) ||
            (curValue == null && !containsKey(key))) {
            return false;
        }
        put(key, newValue);
        return true;
    }

这个方法就是替换方法,和上面那个很类似就是判断不成立后,调用的是put方法。


    default V replace(K key, V value) {
        V curValue;
        if (((curValue = get(key)) != null) || containsKey(key)) {
            curValue = put(key, value);
        }
        return curValue;
    }

这个方法是替换的方法。和上面拿两个方法很类似,判断后直接返回获取的值。


Map接口还有好多方法没说,因为Lambda表达式这块我不是很熟练,等熟练了我补上!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值