java集合框架之map

本文详细介绍了Java中的Map集合,包括其概念、常用方法如添加、获取、删除、判断和遍历,以及三种主要的Map实现类HashMap、LinkedHashMap和TreeMap的特点和使用场景。并通过实际案例展示了如何统计字符串中单词的出现次数。
摘要由CSDN通过智能技术生成

一、Map集合

1.1Map集合介绍

  • Map集合称为双列集合,格式:{key1=value1, key2=value2, key3=value3……}
  • Map集合的每个元素“key=value”称为一个键值对/键值对对象/一个Entry对象,Map集合也被叫做“键值对集合
  • Map集合key不可以重复value可以重复
  • Map集合key和value一一对应
//导入类
import java.util.*;
import java.util.Map;
import java.util.HashMap;

//创建map对象
Map<String,Integer> map = new HashMap<>();

1.2Map集合体系

请添加图片描述

  • HashMap: 无序、不重复、无索引;(用的最多 )
  • LinkedHashMap: 有序、不重复、无索引。
  • TreeMap:按照大小默认升序排序、不重复、无索引。

二、Map集合常用方法

public V put(K key,V value);//添加键值对对象(键,值)
public int size();//获取集合大小
public void clear();//清空集合
public boolean isEmpty();//判断集合是否为空,为空返回true,反之false
public V get(Object key);//根据键获取对应值
public V remove(Object key);//根据键删除整个元素,返回被删除键的值
public boolean containsKey(Object key);//判断是否包含某个键
public boolean containsValue(Object value);//判断是否包含某个值
public Set<K> keySet();//获取Map集合全部键
public Collection<V> values();//获取Map集合的全部值

具体案例:

import java.util.*;

public class MapDemo {
    public static void main(String[] args) {
        //创建map对象
        Map<String,Integer> map = new HashMap<>();

        //1.map.put(K,V);往map对象添加键值对
        map.put("A",11);
        map.put("A",12);
        map.put("B",13);
        map.put("C",13);
        map.put("D",16);
        map.put(null,null);
        System.out.println("map所有键值对是"+map);

        //2.map.size();获取集合大小
        System.out.println("map的大小是"+map.size());

        //3.清空集合
        //map.clear();

        //4.map.isEmpty();判断集合是否为空
        System.out.println("map为空是"+map.isEmpty());

        //5.map.get(Object key);根据键获取对应值
        System.out.println("map键为A的值是"+map.get("A"));

        //6.map.remove(Object key);根据键删除整个元素,返回被删除键的值
        System.out.println("map删除键为A的值是"+map.remove("A"));

        //7.map.containsKey(Object key);判断是否包含某个键
        System.out.println("map包含键A是"+map.containsKey("A"));

        //8.map.containsValue(Object value);判断是否包含某个值
        System.out.println("map包含值13是"+map.containsValue(13));

        //9.public Set<K> keySet();获取Map集合全部键
        Set<String> keys = map.keySet();
        System.out.println("map所有的键是"+keys);

        //10.public Collection<V> values();获取Map集合的全部值
        Collection<Integer> values = map.values();
        System.out.println("map所有的键是"+values);
       
        //11.将其他Map集合内容导入到指定Map集合
        Map<String,Integer> map2 = new HashMap<>();
        map2.put("Q",60);
        map2.put("H",99);
        map.putAll(map2);
        System.out.println("添加后的Map为"+map);
    }
}

在这里插入图片描述

三、Map集合遍历方法

数据准备:

//创建map对象
Map<String,Integer>map = new HashMap<>();
map.put("ItemA",14);
map.put("ItemB",16);
map.put("ItemC",11);
map.put("ItemD",19);
map.put("ItemE",22);

3.1键找值

//方法一:键找值
//1.获取map的全部键key
Set<String> key = map.keySet();

//2.遍历全部的键,获取键对应的值
for(String keys:key){
    int value = map.get(keys);
    System.out.println(keys+"->"+value);
}

3.2把键值对看成一个整体进行遍历

//调用Map集合提供entrySet方法,把Map集合转换成键值对类型的Set集合
 Set<Map.Entry<String,Integer>> entries = map.entrySet();
 for(Map.Entry<String,Integer> entry:entries){
     String key = entry.getKey();
     Integer value = entry.getValue();
     System.out.println(key+"->"+value);
 }

3.3Lambda表达式

 map.forEach((k,v)->{
     System.out.println(k+"->"+v);
 });

完整代码:

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class Traversal {
    public static void main(String[] args) {
        Map<String,Integer>map = new HashMap<>();
        map.put("ItemA",14);
        map.put("ItemB",16);
        map.put("ItemC",11);
        map.put("ItemD",19);
        map.put("ItemE",22);

//        //方法一:键找值
//        //1.获取map的全部键key
//        Set<String> key = map.keySet();
//
//        //2.遍历全部的键,获取键对应的值
//        for(String keys:key){
//            int value = map.get(keys);
//            System.out.println(keys+"->"+value);
//        }

//        //方法二:把键值对看成一个整体进行遍历
//        Set<Map.Entry<String,Integer>> entries = map.entrySet();
//        for(Map.Entry<String,Integer> entry:entries){
//            String key = entry.getKey();
//            Integer value = entry.getValue();
//            System.out.println(key+"->"+value);
//        }

        //方法三:Lambda表达式
        map.forEach((k,v)->{
            System.out.println(k+"->"+v);
        });
    }
}

在这里插入图片描述

四、常用的Map实现类

4.1 HashMap

特点HashMap基于哈希表实现的 Map 集合,它提供了快速的查找、插入和删除操作。HashMap 允许键和值为 null,并且不保证键值对的顺序
使用案例:适用于大部分的键值对存储需求,例如缓存、快速查找等场景。

import java.util.HashMap;
import java.util.Map;

public class HashMapDemo {
    public static void main(String[] args) {
    	//创建HashMap对象,无序、不重复、无索引
        Map<String,Integer> hashMap = new HashMap<>();
        hashMap.put("HA",16);
        hashMap.put("HC",16);
        hashMap.put("HF",18);
        hashMap.put("HG",10);
        hashMap.put("HQ",1);
        hashMap.put(null,null);

        hashMap.forEach((k,v)->{
            System.out.println(k+"->"+v);
        });
    }
}

在这里插入图片描述

4.2 LinkedHashMap

特点LinkedHashMap 继承自 HashMap,通过双向链表维护插入顺序或者访问顺序。它允许键和值为空,并且可以保持元素的插入顺序或访问顺序
使用案例:适用于需要按特定顺序访问键值对的场景,也可以用于实现 LRU 缓存。

import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapDemo {
    public static void main(String[] args) {
    	//创建LinkedHashMap对象,有序、不重复、无索引
        Map<String,Integer> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put("LA",16);
        linkedHashMap.put("LB",48);
        linkedHashMap.put("LE",45);
        linkedHashMap.put("LC",-18);
        linkedHashMap.put("LD",4);
        linkedHashMap.put(null,null);

        linkedHashMap.forEach((k,v)->{
            System.out.println(k+"->"+v);
        });
    }
}

在这里插入图片描述

4.3 TreeMap

特点TreeMap基于红黑树实现的有序 Map 集合,它提供了按键的自然顺序或自定义顺序进行排序。TreeMap 不允许键为空,但允许值为空
使用案例:适用于需要按照键的顺序进行存储和遍历的场景,例如实现一个有序映射。

import java.util.Map;
import java.util.TreeMap;

public class TreeMapDemo {
    public static void main(String[] args) {
        //创建treeMap对象,按照大小默认升序排序、不重复、无索引。
        Map<String,Integer> treeMap = new TreeMap<>();
        treeMap.put("TC",15);
        treeMap.put("TG",10);
        treeMap.put("TE",15);
        treeMap.put("TK",46);
        treeMap.put("TZ",12);
        treeMap.put("TA",null);
        //treeMap.put(null,null);不允许键为空

        treeMap.forEach((k,v)->{
            System.out.println(k+"->"+v);
        });
    }
}

在这里插入图片描述

五、案例分析

当我们想要统计一串字符中的单词个数时,可以使用 HashMap 来实现。我们可以按照空格分割字符,然后统计每个单词的出现次数。

import java.util.HashMap;
import java.util.Map;

public class Demo {
    public static void main(String[] args) {
        String text = "Hello, this is a simple example. Hello again.";
        // 创建一个 HashMap 用于统计单词出现的次数
        Map<String, Integer> wordCountMap = new HashMap<>();

        // 按空格分割字符串,并统计单词出现的次数
        String[] words = text.split("\\s+"); // 以空格作为分隔符
        for (String word : words) {
            // 去除标点符号
            word = word.replaceAll("[^a-zA-Z]", "").toLowerCase();
            // 统计单词次数
            if (!word.isEmpty()) {
                //往 HashMap 中存入单词和其对应的出现次数,如果这个单词之前没有出现过,它的出现次数被初始化为 1;
                //如果这个单词之前已经出现过,它的出现次数会在原有基础上加 1。
                wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);
            }
        }

        // 输出统计结果
        System.out.println("单词统计结果:");
        wordCountMap.forEach((k,v)->{
            System.out.println(k+":"+v);
        });
    }
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值