JavaSE-Map集合

本文详细介绍了Java中的Map集合及其子类HashMap和LinkedHashMap。HashMap基于哈希表存储,允许快速存取元素,而LinkedHashMap则在HashMap基础上增加了元素的插入顺序。文中展示了如何通过键值对进行元素的存取、删除和查找操作,并演示了Map的三种遍历方式。此外,还探讨了LinkedHashMap保持插入顺序的特点。
摘要由CSDN通过智能技术生成

7.1 Map集合的体系

7.1.1 图示

  • java.util.Map<K,V>集合中存取元素的基本单位是:单对元素,其中类型参数如下:
K - 此映射所维护的键(Key)的类型,相当于目录。
V - 映射值(Value)的类型,相当于内容。
  • 该集合中key是不允许重复的,而且一个key只能对应一个value。
  • 该集合的主要实现类有:HashMap类、TreeMap类、LinkedHashMap类、Hashtable类、Properties类。

7.2 HashMap类

7.2.1 HashMap类特点
  • HashMap类的底层是采用哈希表进行数据管理的。

  • LinkedHashMap类与HashMap类的不同之处在于内部维护了一个双向链表,链表中记录了元素的迭代顺序,

    也就是元素插入集合中的先后顺序,因此便于迭代。

7.2.2 元素放入HashMap
  • 使用元素的key调用hashCode方法获取对应的哈希码值,再由某种哈希算法计算在数组中的索引位置。
  • 若该位置没有元素,则将该键值对直接放入即可。
  • 若该位置有元素,则使用key与已有元素依次比较哈希值,若哈希值不相同,则将该元素直接放入。
  • 若key与已有元素的哈希值相同,则使用key调用equals方法与已有元素依次比较。若相等则将对应的value修改,否则将键值对直接放入即可。

1) 代码示例

package cn.guardwhy_01;

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

/**
 Map集合概述:
     Map集合是一种双列集合,每个元素包含两个值。
     Map集合的每个元素的格式:key=value(键值对元素)。
     Map集合也被称为键值对集合。

Map集合的特点:
     1.Map集合的特点都是由键决定的。
     2.Map集合的键是无序不重复的,无索引的。Map集合后面重复的键对应的元素会覆盖前面的整个元素!
     3.Map集合的值无要求。
     4.Map集合的键值对都可以为null。
 */
public class MapDemo01 {
    public static void main(String[] args) {
        // 创建Map集合对象
        Map<String, Integer> shops = new HashMap<>();
        // 向集合中添加元素
        shops.put("小米",10);
        shops.put("小米",30); // 键重复了,后面的覆盖前面的整个元素
        shops.put("huawei",1000);
        shops.put("iphone11",1);
        shops.put("iphone11",2);
        shops.put("三星",2);
        shops.put(null,null);

        // 输出map集合
        System.out.println("map集合:" + shops);  // map集合:{null=null, huawei=1000, iphone11=2, 小米=30, 三星=2}
    }
}
7.2.3 常用的方法
方法声明功能介绍
V put(K key, V value)将Key-Value对存入Map,若集合中已经包含该Key,则替换该Key所对
应的Value,返回值为该Key原来所对应的Value,若没有则返回null
V get(Object key)返回与参数Key所对应的Value对象,如果不存在则返回null
boolean containsKey(Object key)判断集合中是否包含指定的Key
boolean containsValue (Object value);判断集合中是否包含指定的Value
V remove(Object key)根据参数指定的key进行删除

1) 代码示例

package cn.guardwhy_01;

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

/**
 Map集合的常用API:
     - public V put(K key, V value):  把指定的键与指定的值添加到Map集合中。
     - public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
     - public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
     - public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。
     - public boolean containKey(Object key):判断该集合中是否有此键。
 */
public class MapDemo02 {
    public static void main(String[] args) {
        // 1.创建Map集合对象
        Map<String, Integer> maps = new HashMap<>();
        // 2.向集合中添加元素
        maps.put("小米",3000);
        maps.put("huawei",1000);
        maps.put("iphone11",6700);
        maps.put("iphone11",8000);
        maps.put("三星",4500);
        // 3.输出map集合
        System.out.println("map集合:" + maps);    // map集合:{huawei=1000, iphone11=8000, 小米=3000, 三星=4500}
        // 4.根据键取值
        System.out.println("根据键取值:" + maps.get("小米"));  // 根据键取值:3000
        // 5.根据键删除整个键值对元素。
        System.out.println("移除键:" + maps.remove("小米"));
        // map集合(删除键值对):{huawei=1000, iphone11=8000, 三星=4500}
        System.out.println("map集合(删除键值对):" + maps);

        // 6.获取全部键的集合。因为键是无序不重复的,返回的是Set集合
        Set<String> keys = maps.keySet();
        // maps的键值:[huawei, iphone11, 三星]
        System.out.println("maps的key:" + keys);

        // 7.获取全部值的集合
        Collection<Integer> values = maps.values();
        System.out.println("maps的value:" + values);  // maps的值:[1000, 8000, 4500]

        // 8.判断集合是否包含某个值
        System.out.println(maps.containsValue(1000));   // true
        System.out.println(maps.containsValue(800));    // false
        System.out.println(maps.containsValue(4500));   // true
    }
}

7.3 LinkedHashMap类

7.3.1 LinkedHashMap类特点
  • 元素有序不重复,无索引的,底层也是基于哈希表存储数据的,只是每个数据多了附属值。
  • 每个数据多了一个链记录添加顺序。

1)代码示例

package cn.guardwhy_01;

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

public class LinkedHashMapDemo07 {
    public static void main(String[] args) {
        // 创建Map集合对象
        Map<String, Integer> maps = new LinkedHashMap<>();
        // 向集合中添加元素
        maps.put("小米",30);
        maps.put("huawei",10);
        maps.put("iphone11",67);
        maps.put("iphone11",80);
        maps.put("三星",45);

        // 遍历集合
        maps.forEach((k, v) ->{
            System.out.println(k + "==>" + v);
        });
    }
}

2) 执行结果

7.4 Map遍历

7.4.1 键找值的方式遍历

1)代码示例

package cn.guardwhy_01;

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

/**
Map集合的遍历

 Map集合的遍历方式:3种。
 (1)键找值的方式遍历:先拿到所有的键,再遍历键获取对应值。(最简单的)
 (2)键值对方式遍历。
 (3)JDK 1.8开始的新技术(普遍使用了)

 1.键找值的方式遍历:先拿到所有的键,再遍历键获取对应值。(最简单的)
 */
public class MapDemo03 {
    public static void main(String[] args) {
        // 创建Map集合对象
        Map<String, Integer> maps = new HashMap<>();
        // 向集合中添加元素
        maps.put("小米",30);
        maps.put("huawei",10);
        maps.put("iphone11",67);
        maps.put("iphone11",80);
        maps.put("三星",45);
        // 取得Map集合的全部键
        Set<String> keys = maps.keySet();
        // 遍历键找到相应的值
        for(String key : keys){
            // 根据键找到相应的值
            Integer value = maps.get(key);
            // 输出结果
            System.out.println(key + "==>" + value);
        }
    }
}
7.4.2 键值对方式遍历

1)代码示例

package cn.guardwhy_01;

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

/**
 Map集合的遍历。

 Map集合的遍历方式:3种。
 (1)键找值的方式遍历:先拿到所有的键,再遍历键获取对应值。
 (2)键值对方式遍历.
 (3)JDK 1.8开始的新技术

 2.键值对方式遍历
 */
public class MapDemo04 {
    public static void main(String[] args) {
        // 创建Map集合对象
        Map<String, Integer> maps = new HashMap<>();
        // 向集合中添加元素
        maps.put("小米",30);
        maps.put("huawei",10);
        maps.put("iphone11",67);
        maps.put("iphone11",80);
        maps.put("三星",45);
        // 遍历集合
        Set<Map.Entry<String, Integer>> entries = maps.entrySet();
        for(Map.Entry<String, Integer> entry : entries){
            // 取键
            String key = entry.getKey();
            // 取值
            Integer value = entry.getValue();
            System.out.println(key + "==>" + value);
        }
    }
}
7.4.3 jdk1.8新技术

1) 代码示例

package cn.guardwhy_01;
/**
 Map集合的遍历方式:3种。
 (1)键找值的方式遍历:先拿到所有的键,再遍历键获取对应值。(最简单的)
 (2)键值对方式遍历。(老程序员用的多,更面向对象的遍历思想)
 (3)JDK 1.8开始的新技术(普遍使用了)

 3.JDK 1.8开始的新技术(普遍使用了)
 */
import java.util.HashMap;
import java.util.Map;

public class MapDemo05 {
    public static void main(String[] args) {
        // 创建Map集合对象
        Map<String, Integer> maps = new HashMap<>();
        // 向集合中添加元素
        maps.put("小米",30);
        maps.put("huawei",10);
        maps.put("iphone11",67);
        maps.put("iphone11",80);
        maps.put("三星",45);

        // 遍历集合
        maps.forEach((k, v) ->{
            System.out.println(k + "==>" + v);
        });
    }
}

2) 执行结果

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值