Java 集合(三)——Map 集合

一、前言

集合按照其存储结构可以分为两大类,分别是单列集合 java.util.Collection 和双列集合 java.util.Map,单列集合我们Java 集合(一)Java 集合(二)中已经讲了,今天我们来讲双列集合 Map

二、Map 集合

2.1、Map 集合概述

现实生活中,我们常会看到这样的一种集合:学生与学号,身份证号与个人,这种一一对应的关系,就叫做映射。Java 提供了专门的集合类用来存放这种对象关系,即 java.util.Map 接口。我们来看一下 Map 集合和 Collection 集合的区别:

  • Collection 中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储。
  • Map 中的集合,元素是成对存在的。每个元素由键与值两部分组成,通过键可以找到对应的值。
  • Collection 中的集合称为单列集合,Map 中的集合称为双列集合。
  • 需要注意的是,Map 中的集合不能包含重复的键,值可以重复,每个键只能对应一个值。

Map 接口中的集合都有两个泛型变量 <K,V>,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量 <K,V> 的数据类型可以相同,也可以不同。

2.2、Map 接口常用实现类

Map 有多个子类,这里我们主要讲解常用的 HashMap 集合和 LinkedHashMap 集合。

  • HashMap<K,V>:存储数据采用的是哈希表结构,元素的存取顺序有可能不一致(无序)。由于要保证键的唯一、不重复,需要重写键的hashCode() 方法和 equals() 方法。
  • LinkedHashMap<K,V>HashMap下有个子类 LinkedHashMap,存储数据采用的是哈希表结构 + 链表结构。通过链表结构可以保证元素的存取顺序一致,通过哈希表结构可以保证键的唯一、不重复,需要重写键的hashCode() 方法和 equals() 方法。

可以类比 HashSetLinkedHashSet

2.3、Map 接口中的常用方法

Map 接口中定义了很多方法,常用的如下:

  • public V put(K key, V value): 把指定的键与指定的值添加到 Map 集合中,存储键值对的时候如果 key 不重复,返回值 vnull,如果 key 重复,返回值 v 是 被替换的 value 值。
    private static void show01() {
         
        // 创建 Map 集合
        Map<String, String> map = new HashMap<>();
        String v1 = map.put("至尊宝", "晶晶");
        System.out.println(v1); // 返回 null
        // 这时候 晶晶 会被 紫霞仙子 替换,返回被替换的 value 值 晶晶
        String v2 = map.put("至尊宝", "紫霞仙子");
        System.out.println(v2); // 返回 晶晶
        System.out.println(map); // 返回 {至尊宝=紫霞仙子}
    	
    	// key 不允许重复,value 可以重复
    	map.put("孙悟空", "紫霞仙子");
        System.out.println(map); // 返回 {至尊宝=紫霞仙子, 孙悟空=紫霞仙子}
    }
    
  • public V remove(Object key): 将指定的键所对应的元素在 Map 集合中删除,返回被删除元素的值。
    private static void show02() {
         
        Map<String, Integer> map = new HashMap<>();
        map.put("王祖贤", 175);
        map.put("林青霞", 168);
        map.put("李嘉欣", 172);
        System.out.println(map); // 返回 {林青霞=168, 李嘉欣=172, 王祖贤=175}
    
        Integer v1 = map.remove("李嘉欣");
        System.out.println(v1); // 返回 172
        System.out.println(map); // 返回 {林青霞=168, 王祖贤=175}
    
        Integer v2 = map.remove("李嘉诚");
        System.out.println(v2); // 返回 null
        System.out.println(map); // 返回 {林青霞=168, 王祖贤=175}
    }
    
  • public V get(Object key) 根据指定的键,在 Map 集合中获取对应的值。
    private static void show03() {
         
        Map<String, String> map = new HashMap<>();
        map.put("邓超", "孙俪");
        map.put("吴奇隆", "刘诗诗");
        map.put("黄晓明", "杨颖");
    
        String v1 = map.get("吴奇隆"); // 返回 刘诗诗
        System.out.println(v1);
    
        String v2 = map.get("胡歌"); // 返回 null
        System.out.println(v2);
    }
    
  • boolean containsKey(Object key) 判断集合中是否包含指定的键。
    private static void show04() {
         
        Map<String, String> map = new HashMap<>();
        map.put("邓超", &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值