第7章-第6节-Java中的Map集合

1、HashMap:

1)、 引入

如果业务需要我们去用姓名的拼音手写字母匹配完整姓名,那么如果用单列数据,我们可能需要两个集合才能存储,而且两个集合之间没有关联不好操作,这种时候双列数据就会起很大作用

2)、 单列数据与双列数据

3)、map概述

Map :映射。跟 Collections 体系的集合,是不一样的。是以key-value的形式保存数据的,常常称之为键值对。

4)、 HashMap概念及特点

概述:HashMap实现了Map接口,是Map子类中使用最最最多的。

数据结构:key部分使用的数据结构为:数组+双向链表+红黑树 。HashSet使用的就是key部分进行存储的。

存储数据特点

  • 键值对映射关系

  • 一个键对应一个值

  • 键不能重复,值可以重复

  • 键允许为空值

  • 元素存取无序

5)、 方法的使用

方法名说明
V put(K key,V value)添加元素
V remove(Object key)根据键删除键值对元素
void clear()移除所有的键值对元素
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中键值对的个数
V get(Object key)根据键获取值
Set<K> keySet()获取所有键的集合
Collection<V> values()获取所有值的集合
Set<Map.Entry<K,V>> entrySet()获取所有键值对对象的集合

 6)、增加

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

public class AddDemo {
    public static void main(String[] args) {
        // 定义一个map对象,key存放字符串类型,value存放Integer类型
        Map<String, Integer> map = new HashMap<>();
        map.put("a", 5);
        map.put("c", 2);
        map.put("e", 6);
        map.put(null, 0);
        map.put(null, 2);
        System.out.println(map);

        // 定义一个map,key存放字符串类型,value存放字符串类型
        Map<String, String> map1 = new HashMap<>();
        map1.put("java", "企业级系统开发");
        map1.put("Python", "人工智能");
        map1.put("go", "字节跳动");
        map1.put(null, null);
        // key不存在就添加(key存在,如果value值为null,也会添加)
        map1.putIfAbsent(null, "哈哈");
        System.out.println(map1);

    }
}

7)、删除

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

public class RemoveDemo {
    public static void main(String[] args) {
        // 定义一个map,key存放字符串类型,value存放字符串类型
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");

        // 根据键值删除,返回被删除的元素
        String content = map.remove("001");
        System.out.println(content);
        System.out.println(map);

        // 根据键值对删除,返回一个Boolean类型的结果
        boolean flag = map.remove("004", "东方不败");
        System.out.println(flag);
        System.out.println(map);

        // 清空集合
        map.clear();
        System.out.println(map);

    }
}

8)、修改

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

public class UpdateDemo {
    public static void main(String[] args) {
        // 定义一个map,key存放字符串类型,value存放字符串类型
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");
        System.out.println(map);

        // 修改(存在就修改,不存在就添加)
        String content = map.put("001", "唐延");
        System.out.println(content);
        System.out.println(map);

        // 根据key查找,替换指定key值的内容
        String con = map.replace("006", "唐海峰");
        System.out.println(con);
        System.out.println(map);

        // 根据key,value查找,替换指定的值
        map.replace("001", "唐延", "tarnett");
        System.out.println(map);
    }
}

9)、查询

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

public class SelectDemo {
    public static void main(String[] args) {
        // 定义一个map,key存放字符串类型,value存放字符串类型
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");
        System.out.println(map);

        // 获取指定key对应的值
        String content = map.get("001");
        System.out.println(content);

        // 获取集合的长度,获取key的长度
        System.out.println(map.size());

        // 查询是否包含指定的key
        System.out.println(map.containsKey("006"));

        // 判断是否为空
        System.out.println(map.isEmpty());

        // 获取所有的key
        Set<String> keySet = map.keySet();
        System.out.println(keySet);

        // 获取所有的值
        Collection<String> values = map.values();
        System.out.println(values);
    }
}

 2、两种遍历:

1)、通过key获取值

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

public class KetSetDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");

        // 获取所有的key
        Set<String> keySet = map.keySet();
        // 遍历keySet,通过key获取value
        for(String key : keySet){
            String value = map.get(key);
            System.out.println(value);
        }
    }
}

2)、获取所有的键值对

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

public class EntryDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");

        // 获取所有的键值对
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        // 遍历键值对
        for(Map.Entry<String, String> entry : entrySet){
            // 通过键值对对象获取key和value
            System.out.println("key = " + entry.getKey() + " : " + entry.getValue());
        }
    }
}

3)、HashMap保存各种数据类型:

1>、键是String,值为自定义类型

import java.util.HashMap;
import java.util.Set;

/**
 * 键是String,值为自定义类型
 */
public class Test01 {
    public static void main(String[] args) {
        HashMap<String, Student> map = new HashMap<>();
        map.put("001", new Student("zhangsan", 21));
        map.put("002", new Student("lisi", 22));
        map.put("003", new Student("wangwu", 23));
        System.out.println(map);
        
        // 遍历
        Set<String> keySet = map.keySet();
        for(String key : keySet) {
            System.out.println(map.get(key));
        }
    }
}

2>、键是String,值为ArrayList

import java.util.*;

/**
 * 键是String,值为ArrayList
 */
public class Test02 {
    public static void main(String[] args) {
        Map<String, List<String>> map = new HashMap<>();
        List list1 = new ArrayList();
        list1.add("孙悟空");
        list1.add("猪八戒");
        map.put("西游记", list1);

        List list2 = new ArrayList();
        list2.add("赵云");
        list2.add("马超");
        map.put("三国演义", list2);

        // 遍历
        Set<String> keySet = map.keySet();
        for(String key : keySet) {
            List<String> list = map.get(key);
            for (String value : list) {
                System.out.println(value);
            }
        }
    }
}

3>、ArrayList嵌套HashMap

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test03 {
    public static void main(String[] args) {
        List<HashMap<String, String>> list = new ArrayList<>();

        HashMap<String, String> map1 = new HashMap<>();
        map1.put("杨过", "小龙女");
        map1.put("郭靖", "黄蓉");
        list.add(map1);

        HashMap<String, String> map2 = new HashMap<>();
        map2.put("java", "系统开发");
        map2.put("go", "字节跳动");
        list.add(map2);

        System.out.println(list);
    }
}

关于HashMap的底层原理,可以看我这篇博文:Java中HashMap的底层原理

本电子书目录:《Java基础的重点知识点全集》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zwarwolf

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

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

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

打赏作者

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

抵扣说明:

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

余额充值