当前位置: 首页 > news >正文

集合(下)Map集合的使用

文章目录

  • 前言
  • 一、Map接口
  • 二、Map接口的实现类
    • 1.HashMap类
    • 2.TreeMap类
  • 总结

前言

       Map集合没有继承Collection接口,不能像List集合和Set集合那样直接使用Collection接口的方法。Map集合其自身通过以key到value的映射关系实现的集合,也有相应的许多方法。类似与函数,Map中不能包含相同的key,每个key只能映射一个value值,value值可以相同。Map集合是指Map接口以及Map接口的所有实现类。


一、Map接口

        Map接口提供了将key映射到value值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个value值。Map集合中允许值对象(value)是null,而且没有个数限制

        Map接口同样提供了集合的常用方法:

Map接口中的常用方法
方法功能描述
put(K key,V value)向集合中添加指定的key与value的映射关系的对象
containsKey(Object key)如果此映射包含指定key的映射关系,则返回ture值
containsValue(Object value)如果有一个或多个key映射到value值,则返回ture值
get(Object key)如果存在一个指定的key对象,则返回对应的value值,否则返回null值
keySet()返回该集合中的所有key对象形成一个Set集合
values()返回该集合中的所有值形成的Colllection集合
size()返回map集合元素长度int值
remove(Object key,Object values)删除该map集合中的指定元素
replace(Object key,Object values)替换该map元素中的指定元素

        示例代码:

import java.util.*;public class MapDemo {public static void main(String[] args) {//创建了一个Person类,构造方法为(String ID,String Name),getID(),getName()用于获取People p1 = new People("101", "李三");People p2 = new People("102", "李四");People p3 = new People("103", "王五"); People p4 = new People("104", "赵六");People p5 = new People("105", "黄七");//以下为HashMap的代码Map<String,String> map = new HashMap<>();map.put(p5.getID(), p5.getName()).map.put(p4.getID(), p4.getName());map.put(p3.getID(), p3.getName());map.put(p2.getID(), p2.getName());map.put(p1.getID(), p1.getName());//以上是对map集合存放数据System.out.println("此map集合长度:"+map.size());System.out.println("ID为105的人是否存在:"+map.containsKey("105"));//使用keySet()方法把key存入Set集合,从而可以使用Set方法中的迭代器Set<String> set = map.keySet();Iterator<String> iterator = set.iterator();while (iterator.hasNext()) { //遍历map集合元素String id=(String)iterator.next();System.out.println("id:"+id+" name:"+map.get(id));}}
}

         运行结果:

二、Map接口的实现类

        Map接口常用的实现类有HashMapTreeMap。建议使用 HashMap类来实现Map集合。HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行迅速查找;而TreeMap中的映射关系存在一定顺序,如果希望元素排列有序,应该用TreeMap实现Map集合

1.HashMap类

        HashMap类是基于哈希表的Map接口的实现。此实现提供所有可选的映射操纵。允许使用null值和null键,但必须保持键的唯一性。HashMap通过映射关系进行快速查找,但不保证各个元素的排放位置。但是在Java 8之后,HashMap的内部实现进行了优化,使得它能够保持插入顺序。这意味着,当你遍历HashMap的时候,它会按照元素插入的顺序进行输出。

        HashMap类实现Map集合:   

Map<> map = new HashMap<>();

        实例: 

    public static void main(String[] args) {People p1 = new People("101", "李三");People p2 = new People("102", "李四");People p4 = new People("104", "赵六");People p5 = new People("105", "黄七");People p3 = new People("103", "王五"); //以下为HashMap的代码Map<String,String> map = new HashMap<>();map.put(p4.getID(), p4.getName());map.put(p3.getID(), p3.getName());map.put(p2.getID(), p2.getName());map.put(p1.getID(), p1.getName());map.put(p5.getID(), p5.getName());Set<String> set = map.keySet();Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String id = (String)iterator.next();String name = (String)map.get(id);System.out.println("id:"+id+" name:"+name);}}

        输出结果:

 

2.TreeMap类

        TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序。但添加、删除和查找映射关系时,不如HashMap效率高。TreeMap不允许键对象为null。

        TreeMap类实现Map接口: 

Map<> map = new TreeMap<>();

        实例: 

import java.util.*;public class MapDemo {public static void main(String[] args) {People p1 = new People("101", "李三");People p2 = new People("102", "李四");People p3 = new People("103", "王五"); People p4 = new People("104", "赵六");People p5 = new People("105", "黄七");//以下为HashMap的代码Map<String,String> map = new TreeMap<>();map.put(p4.getID(), p4.getName());map.put(p3.getID(), p3.getName());map.put(p2.getID(), p2.getName());map.put(p1.getID(), p1.getName());map.put(p5.getID(), p5.getName());Set<String> set = map.keySet();Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String id = (String)iterator.next();String name = (String)map.get(id);System.out.println("id:"+id+" name:"+name);}}
}

        运行结果:


总结

        以上就是Map集合的相关介绍和简单使用,本文仅仅简单介绍了Map方法,而Map接口提供了大量能使我们快速便捷地处理键与值的函数和方法,有不足或文章错误的地方,欢迎在评论区中指正。

http://www.lryc.cn/news/325836.html

相关文章:

  • AAPT: error: resource android:attr/dialogCornerRadius not found.
  • 数字功放VS模拟功放,选择适合你的音频解决方案
  • 5.88 BCC工具之tcpsynbl.py解读
  • GVRP实现vlan的自动创建和注册
  • Oracle VM VirtualBox修改磁盘大小
  • 【嵌入式硬件】步进电机
  • FlyControls 是 THREE.js 中用于实现飞行控制的类,它用于控制摄像机在三维空间中的飞行。
  • 【Java程序设计】【C00366】基于(JavaWeb)Springboot的纹理生产图片系统(有论文)
  • 编译原理Lab. 1 初代编译器实验说明和要求
  • python判断工作日,节假日
  • 练习4-权重衰减(李沐函数简要解析)
  • websocket 中 request-line 中的URI编码问题
  • 为何ChatGPT日耗电超50万度?
  • __init__.py 的作用
  • Redis到底是多线程还是单线程?
  • JAVA 100道题(18)
  • 【C++】每日一题 137 只出现一次的数字
  • RAG进阶笔记:RAG进阶
  • 《论文阅读》带边界调整的联合约束学习用于情感原因对提取 ACL 2023
  • 【微服务】接口幂等性常用解决方案
  • RocketMQ学习笔记:零拷贝
  • 3.26日总结
  • 应用日志集成到ElasticSearch
  • MySQL多表联查函数
  • JAVAEE—实现多线程版本的定时器
  • KY228 找位置(用Java实现)
  • 物联网边缘网关有哪些优势?-天拓四方
  • 【C++】6-2 交换函数2 分数 10
  • kafka 01
  • Linux离线安装Docker-Oracle_11g