Java_Map集合

news2024/12/24 22:05:55

认识Map集合

Map集合称为双列集合,格式:{key1=value,key2=value2,key3=value3,…},一次需要存一对数据作为一个元素。
Map集合的每个元素“Key=value” 称为一个键值对/键值对对象/一个Entry对象,Map集合也被叫做“键值对集合”
Map集合的所有键是不允许重复的,但值可以重复,键和值是一 一对应的,每一个键只能找到自己的对应值(Map集合的键不能重复,Map集合可以重复 )

Map集合体系

Map集合体系

Map集合体系的特点

注意:Map系列集合的特点都是由键决定的,值只是一个附属品,值是不做要求的

HashMap(由键决定特点):无序、不重复、无索引(用的最多)
LinkedHashMap(由键决定特点):由键决定的特点:有序、不重复、无索引。
TreeMap(由键决定特点):按照大小默认升序排序、不重复、无索引。

   public static void main(String []args)
   {
      Map<String ,Integer> map = new LinkedHashMap<>();
      map.put("手表"100);
      map.put("手表"200);
      map.put("手机",2);
      map.put("Java",2);
      map.put(null,null);
      System.out.println(map);

      Map<Integer,String> map1 = new TreeMap(); //可排序、不重复、无索引
      map1.put(23,"Java");
      map1.put(23,"MySQL");
      map1.put(19,"李四");
      map1.put(20,"王五");
      System.out.println(map1);

   }

为什么要先学习Map的常用方法?

Map 是双列集合的祖宗,它的功能是全部双列集合都可以继承过来使用的。

 public class MapTest2{
    public static void main(String[] args)
    {
       //1、添加元素:无序、无重复、无索引
        Map<String,Integer> map = new HashMap();
        map.put("手表",100);
        map.put("手表"220);
        map.put("手机"2);
        map.put(null,null);
        System.out.println(map);

        //map = {null=null,手表=220,Java=2,手机=2}
         
         //2、public int size():获取集合的大小
         System.out.println(map.size());

          //3、public void clear();清空集合
          map.clear();
          System.out.println(map);

         //4、public boolean isEmpty():判断集合是否为空,为空返回True,反之。
         System.out.println(map.isEmpty());
         //5、public V get(Object key) 根据键获取对应值
         int v1 = map.get("手表");
         System.out.println(v1);
         System.out.println(map.get("手机"));
         System.out.println(map.get("张三"));

         //6、public V remove(Obejct key):根据键删除整个元素(删除键会返回的值)
         System.out.println(map.remove("手表"));
         System.out.println(map);
         //7、public boolean containsKey(Object key):判断是否包含某个键,包含返回Ture,反之false
        System.out.println(map.containsKey("手表"));
        System.out.println(map.containsKey("手机"));

       //8、public boolean containsValue(Object value):判断是否包含某个信息
       System.out.println(map.containsValue(2));//true
 System.out.println(map.containsValue("2"));//false
 //9、public Set<k> keySet(): 获取Map集合的全部键
 Set<String> keys = map.keySet();
 System.out.println(keys);

//10、public Collection <V> values();获取Map集合的全部值
 Collection<Integer> values = map.values();
 System.out.println(values);

//11、把其它的Map集合的数据倒入到自己的集合中来
  Map<String,Integer> map1 = new HashMap<>();
  map1.put("java1",10);
  map1.put("java2",20);
  Map<String,Integer> map2 = new HashMap<>();
  map2.put("java3",10);
  map2.put("java2",222);
  
  map1.putAll(map2);//putAll: 把Map2集合中的元素全部倒入一份到map集合
  System.out.println(map1);
  System.out.println(map2);
  
         
         
    }
 }


方法名称说明
public V put(K key,V value)添加元素
public int size()获取集合大小
public void clear()清空集合
public void 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 keySet()全部键的集合
public Collection values获取Map集合的全部值

Map集合的遍历方式

键值对

Map提供的方法说明
Set<Map.Entry<K,V> entrySet()获取所有“键值对”的集合
public class MapTest2{
 public static void main(String [] args)
 {
   Map<String,Double> map = new HashMap<>();
   map.put("蜘蛛精"169.8);
   map.put("紫霞",165.8);
   map.put("至尊宝",169.5);
   map.put("牛魔王",184.5);

  System.out.println(map);


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

   }


 }
} 
 

Map 集合的遍历方式三:Lambda

需要用到Map的如下方法

方法名称说明
default void forEach(BiConsumer<? super k, ? super v> action)结合lambda遍历Map集合
public class MapTest2{
 public static void main(String [] args)
 {
   Map<String,Double> map = new HashMap<>();
   map.put("蜘蛛精"169.8);
   map.put("紫霞",165.8);
   map.put("至尊宝",169.5);
   map.put("牛魔王",184.5);

  System.out.println(map);
 //map = {蜘蛛精=169.8,牛魔王=183.9,至尊宝=169.5,紫霞=165.8}

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


map.forEach(new BiConsumer<String,Double>(){
   @Override
    public void accept(String k ,Double v)
    {
     System.out.println(k+"----"+v);
     
    }

});
  

HashMap集合的底层原理

HashMap跟HashSet的底层原理是一摸一样的,都是基于哈希表实现的。

实际上:原来学的Set系列集合的底层就是基于Map实现的,只是Set集合中的元素只要键数据,不要值数据

 public HashSet()
 {
    map = new HashMap<>();
    
 }
 

哈希表

JDK 8之前,哈希表 = 数组+链表
JDK 8开始,哈希表 = 数组+链表+红黑树
哈希表是一种增删改查数据,性能都较好的数据结构.

HashMap底层是基于哈希表实现的
HashMap集合是一种增删改查的数据,性能都比较好的集合
但是它无序,不能重复,没有索引支持的(由键决定特点)
HashMap的键依赖hashCode方法和equals方法保证键的唯一
如果键存储的是自定义类型对象,可以通过重写hashCode和equals方法,这样可以保证多个对象内容一样时,HashMap集合就能认为是重复的。

   public class Test1HashMap{
      public static void main(String[] args)
      {
         Map<Student,String> map = new HashMap();
         map.put(new Student("蜘蛛精",25,168.5),"蚕丝洞");
         map.put(new Student("蜘蛛精",25,168.5),"水帘洞");
         map.put(new Student("至尊宝",23,163.5),"水帘洞");
         map.put(new Student("牛魔王",28,183.5),"牛头山");
         System.out.println(map);
        
      }
   }

LinkedHashMap 集合的原理

底层数据结构依然是基于哈希实现的,只是每个键值对元素又额外的多了一个双链表机制记录元素顺序(保证有序)
实际上:原来学习LinkedHashSet集合的底层原理就是LinkedHashMap

TreeMap

特点:不重复、无索引、可排序(按照键的大小默认升序排序,只能对键排序)
原理:TreeMap跟TreeSet集合的底层原理是一样的,都是基于红黑树实现的排序。

TreeMap集合也同样支持两种方式来指定排序规则
让类实现Comparable 接口,重写比较规则。
TreeMap集合也有一个参数构造器,支持创建Comparator比较器对象,以便用来指定比较规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1809152.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Simscape Multibody与RigidBodyTree:机器人建模

RigidBodyTree&#xff1a;主要用于表示机器人刚体结构的动力学模型&#xff0c;重点关注机器人的几何结构、质量和力矩&#xff0c;以及它们如何随时间变化。它通常用于计算机器人的运动和受力情况。Simscape Multibody&#xff1a;作为Simscape的一个子模块&#xff0c;专门用…

10.2 Go Channel

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

虚拟机调用摄像头设备一直 select timeout问题的解决

在VMware里面调用v4l2-ctl捕获图像&#xff0c;或者opencv的VideoCapture(0)捕获图像&#xff0c;或者直接调用v4l2的函数&#xff0c;在streamon后&#xff0c;调用select读取数据&#xff0c;均会一直提示select timeout的问题&#xff0c;大概率是由于USB版本的兼容性造成的…

【氵】Archlinux+KDE Plasma 6+Wayland 安装nvidia驱动 / 开启HDR

参考: NVIDIA - Arch Linux 中文维基 &#xff08;其实就是把 wiki 简化了一下 注&#xff1a;本教程适用 GeForce 930 起、10 系至 20 系、 Quadro / Tesla / Tegra K-系列以及更新的显卡&#xff08;NV110 以及更新的显卡家族&#xff09;&#xff0c;此处以 RTX3060 为例 …

PHP 寿光蔬菜大棚宣传平台-计算机毕业设计源码88288

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于寿光蔬菜大棚宣传平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了寿光蔬菜大棚宣传平台&#xff0c;它彻底…

连续状态方程的离散化例子

连续状态方程的离散化 在控制系统中,连续状态方程的离散化是一个重要的步骤,用于将连续时间系统转换为离散时间系统,以便在数字控制器中实现。这通常涉及将连续时间的微分方程转换为离散时间的差分方程。常用的离散化方法 前向欧拉法(Forward Euler)简单易实现,但精度较…

详解python中的pandas.read_csv()函数

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

OpenGL绘制简单图形

绘制了一个紫色矩形和一个三角形&#xff0c;代码如下&#xff1a; #include <Windows.h> #include <gl/glut.h> void display(void) {glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //设置清屏颜色glClear(GL_COLOR_BUFFER_BIT); //刷新颜色缓冲区&#xff1b;glColor3f…

“程序员职业素养全解析:技能、态度与价值观的融合“

文章目录 每日一句正能量前言专业精神专业精神的重要性技术执着追求的故事结论 沟通能力沟通能力的重要性团队合作意识实际工作中的沟通案例结论 持续学习持续学习的重要性学习方法进步经验结论 后记 每日一句正能量 梦不是为想象&#xff0c;而是让我们继续前往。 前言 在数字…

Policy-Based Reinforcement Learning(1)

之前提到过Discount Return&#xff1a; Action-value Function &#xff1a; State-value Function: &#xff08;这里将action A积分掉&#xff09;这里如果策略函数很好&#xff0c;就会很大&#xff1b;反之策略函数不好&#xff0c;就会很小。 对于离散类型&#xff1a; …

Qt中解决编译中文乱码和编译失败的问题

解决方法 1.使用#pragma execution_character_set(“utf-8”) QT5中在cpp中使用#pragma execution_character_set(“utf-8”)解决中文乱码&#xff0c;不过这里要求该源代码必须保存成带Bom的utf-8格式&#xff0c;这也是有些在网上下载的代码&#xff0c;加上这句源代码后还…

QPS,平均时延和并发数

我们当前有两个服务A和B&#xff0c;想要知道哪个服务的性能更好&#xff0c;该用什么指标来衡量呢&#xff1f; 1. 单次请求时延 一种最简单的方法就是使用同一请求体同时请求两个服务&#xff0c;性能越好的服务时延越短&#xff0c;即 R T 返回结果的时刻 − 发送请求的…

对猫毛过敏?怎么有效的缓解过敏症状,宠物空气净化器有用吗?

猫过敏是一种常见的过敏反应&#xff0c;由猫的皮屑、唾液或尿液中的蛋白质引起。这些蛋白质被称为过敏原&#xff0c;它们可以通过空气传播&#xff0c;被人体吸入后&#xff0c;会触发免疫系统的过度反应。猫过敏是宠物过敏中最常见的类型之一&#xff0c;对许多人来说&#…

C语言学习系列:初识C语言

前言&#xff0c;C语言是什么 语言&#xff0c;比如中文、英语、法语、德语等&#xff0c;是人与人交流的工具。 C语言也是语言&#xff0c;不过是一种特殊的语言&#xff0c;是人与计算机交流的工具。 为什么叫C语言呢&#xff1f; 这就要从C语言的历史说起了。 一&#…

11. MySQL 备份、恢复

文章目录 【 1. MySQL 备份类型 】【 2. 备份数据库 mysqldump 】2.1 备份单个数据表2.2 备份多个数据库2.3 备份所有数据库2.4 备份文件解析 【 3. 恢复数据库 mysql 】【 4. 导出表数据 OUTFILE 】【 5. 恢复表数据 INFILE 】 问题背景 尽管采取了一些管理措施来保证数据库的…

14. RTCP 协议

RTCP 协议概述 RTCP&#xff08;Real-time Transport Control Protocol 或 RTP Control Protocol 或简写 RTCP&#xff09;&#xff0c;实时传输控制协议&#xff0c;是实时传输协议&#xff08;RTP&#xff09;的一个姐妹协议。 注&#xff1a;RTP 协议和 RTP 控制协议&#…

Oracle数据库连接并访问Microsoft SQL Server数据库

Oracle数据库连接并访问Microsoft SQL Server数据库 说明&#xff1a;  1.实际开发中&#xff0c;Oracle数据库与SQLServer数据库之间可能需要相互进行访问&#xff0c;方便业务数据抽取&#xff0c;编写视图及表等操作。  2.SQLServer访问Oracle数据库配置相对较为简单&…

Python数据分析与机器学习在电子商务推荐系统中的应用

文章目录 &#x1f4d1;引言一、推荐系统的类型二、数据收集与预处理2.1 数据收集2.2 数据预处理 三、基于内容的推荐3.1 特征提取3.2 计算相似度3.3 推荐物品 四、协同过滤推荐4.1 基于用户的协同过滤4.2 基于物品的协同过滤 五、混合推荐与评估推荐系统5.1 结合推荐结果5.2 评…

抓包工具 HttpAnalyzerFull_V7.6.4 的下载、安装、使用

目录 一、简介二、下载和安装三、如何注册四、使用介绍4.1 开始、停止、清空监控内容4.2 筛选监控内容4.3 监控内容显示 一、简介 Http Analyzer 是一款功能强大的数据包分析工具&#xff0c;它可以实时监控服务器返回的消息&#xff0c;支持64位Windows系统&#xff0c;可以同…

go语言后端开发学习(三)——基于validator包实现接口校验

前言 在我们开发模块的时候,有一个问题是我们必须要去考虑的&#xff0c;它就是如何进行入参校验&#xff0c;在gin框架的博客中我就介绍过一些常见的参数校验&#xff0c;大家可以参考gin框架学习笔记(四) ——参数绑定与参数验证&#xff0c;而这个其实也不是能够完全应对我…