Map集合源码详解

本文详细介绍了Java中Map集合框架的结构与实现,包括Map接口、内部Entry接口、AbstractMap抽象类、Dictionary类、NavigableMap接口和SortedMap接口的源码解读。探讨了Map的键值对特性、常见实现类如HashMap、HashTable的区别,以及Map在实际应用中的常见面试题。

目录

简介

Map 框架

Map 接口源码解读

Map 内部类Entry接口源码

AbstractMap 抽象类源码解读

Dictionary 抽象类源码解读

SortedMap 接口源码解读

常见面试题


简介

Map是我们常用集合之一,它用于保存具有映射关系的数据。Map集合中的每一个元素都是由键值对构成。Map中所有的键不能重复,但是值可以重复。

Map 框架

Map 一个高度封装的集合接口,它派生出来的类或接口如下

整个Map框架中用到了Dictionary 抽象类,其他类都是Map直接或间接派生出来。

Map 接口源码解读

public interface Map<K,V>

Map 接口定义了集合的基本行为,及内部元素模型。

Map 未实现方法

// 获取元素个数
int size();
// 是否为空
boolean isEmpty();
// 是否包含key
boolean containsKey(Object key);
// 是否包含value
boolean containsValue(Object value);
// 根据key取值
V get(Object key);
// 添加元素
V put(K key, V value);
// 移除key
V remove(Object key);
// 添加一个Map集合
void putAll(Map<? extends K, ? extends V> m);
// 清除
void clear();
// 获取整个key集合
Set<K> keySet();
// 获取所有值
Collection<V> values();
// 获取所有键值对
Set<Map.Entry<K, V>> entrySet();
// 比较是否一样
boolean equals(Object o);
// 获取集合hashCode
int hashCode();

Map 默认方法

default V getOrDefault(Object key, V defaultValue) {
    V v;
    // key不存在或key对应值为空返回默认值,否有返回实际值
    return (((v = get(key)) != null) || containsKey(key))
            ? v
            : defaultValue;
}

根据key获取值,为空或不存在返回默认值

default V putIfAbsent(K key, V value) {
    V v = get(key);
    // key为空则添加
    if (v == null) {
        v = put(key, value);
    }
    return v;
}

如果key不存在或为空就添加此键值对

default boolean remove(Object key, Object value) {
    Object curValue = get(key);
    // value不一样或key不存在返回false
    if (!Objects.equals(curValue, value) ||
            (curValue == null && !containsKey(key))) {
        return false;
    }
    remove(key);
    return true;
}

如果key对应的值与value一样

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源码猎人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值