Skip to content

Map

About 313 wordsAbout 1 min

2025-07-16

简单看看Map接口的代码。

一、Map接口定义

Map是一个接口类。

二、存在的默认方法

default V getOrDefault(Object key, V defaultValue)

如果存在key,返回默认值defaultValue。

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

default V computeIfAbsent(K key, Function<? super k, ? extends V> mappingFunction)

如果存在key,则不执行后面的lambda表达式,如果key不存在就执行后面的lambda表达式。

default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction) {
    Objects.requireNonNull(mappingFunction);
    Object v;
    Object newValue;
    if ((v = this.get(key)) == null && (newValue = mappingFunction.apply(key)) != null) {
        this.put(key, newValue);
        return newValue;
    } else {
        return v;
    }
}

computeIfAbsent方法自动检测cnt是否已经存在于映射中,如果不存在,他就会使用Lambda表达式k->0来计算默认值0, 然后将这个值于cnt关联起来,如果cnt已经存在了,它什么也不会做,然后,无论键是否存在,我们都会增加其计数。

public static void main(String[] args) {
    Map<String, Integer> cnt = new HashMap<>();
    String key = "Joe";

    cnt.computeIfAbsent(key, k -> 0);
    cnt.put(key, cnt.get(key) + 1);
}

Changelog

7/19/25, 4:20 PM
View All Changelog
  • c089a-Merge branch 'dev1'on

求求了,快滚去学习!!!

求求了求求了,快去学习吧!

【题单】贪心算法

不知道方向的时候,可以多看看书,书会给你指明下一步该干什么,加油!