Map

Map 是 Java 中用于存储键值对的集合接口。以下是对 Map 的详细介绍:

特点

键值对存储:每个元素包含一个键和一个值。
键唯一:键不能重复,但值可以重复。
无序/有序:根据具体实现,键值对的顺序可能无序(如 HashMap)或有序(如 TreeMap、LinkedHashMap)。

主要实现类

HashMap
基于哈希表,无序存储。
允许一个 null 键和多个 null 值。

LinkedHashMap
继承自 HashMap,维护插入顺序。
适合需要按插入顺序遍历的场景。

TreeMap
基于红黑树,按键的自然顺序或比较器排序。
不允许 null 键。

常用方法

put(K key, V value):添加键值对。
size(): 获取集合大小
get(Object key):获取键对应的值。
remove(Object key):移除指定键的键值对。
containsKey(Object key):检查是否包含指定键。
containsValue(Object value):检查是否包含指定值。
keySet():返回所有键的集合。
values():返回所有值的集合。
entrySet():返回键值对的集合。
clear(): 清空集合。
isEmpty(): 判断集合是否为空

遍历方法

1.使用键值遍历

        Map<String, String> m = new HashMap<>();
        m.put("aaa","a");
        m.put("bbb","b");
        m.put("ccc","c");
        m.put("ddd","d");
        Set<String> s = m.keySet();
        for(String c :s){
            System.out.println(c+":"+m.get(c));
        }
//        aaa:a
//        ccc:c
//        bbb:b
//        ddd:d

2.entry

entrySet():返回包含所有键值对的 Set 视图。
Map.Entry:表示一个键值对,可以通过 getKey() 和 getValue() 方法访问键和值。

        Map<String, String> m = new HashMap<>();
        m.put("aaa","a");
        m.put("bbb","b");
        m.put("ccc","c");
        m.put("ddd","d");
        for(Map.Entry<String, String> it:m.entrySet()){
            System.out.println(it.getKey() + ":" + it.getValue());
        }
//        aaa:a
//        ccc:c
//        bbb:b
//        ddd:d

3.Lambda表达式

        Map<String, String> m = new HashMap<>();
        m.put("aaa","a");
        m.put("bbb","b");
        m.put("ccc","c");
        m.put("ddd","d");
        m.forEach( (s,  s2) -> System.out.println(s + ":" + s2));
//        aaa:a
//        ccc:c
//        bbb:b
//        ddd:d

子类

在这里插入图片描述
HashMap
底层原理
数据结构:基于哈希表。
哈希函数:通过 hashCode() 计算哈希值。
哈希冲突:使用链表或红黑树(Java 8 及以上)处理。
扩容机制:当元素数量超过阈值(负载因子 x 当前容量)时扩容。

应用场景
适用于需要快速插入、删除、和查找的场景。
无序存储,不保证顺序。

LinkedHashMap
底层原理
继承自 HashMap:保持哈希表结构。
双向链表:维护元素的插入顺序。
顺序性:按插入顺序或访问顺序(可选)存储。

应用场景
需要保持元素插入顺序的场景。
实现缓存(可按访问顺序排序)。

TreeMap
底层原理
红黑树:自平衡的二叉搜索树。
排序:按自然顺序或自定义比较器排序键。
不允许 null 键:因为需要排序比较。

应用场景
需要有序存储键值对的场景。
需要范围查询或按顺序遍历。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值