对于双列集合map的学习

双列集合

特点

1.双列集合一次需要存一对数据,分别是键和值。

2.键和值一一对应,键不能重复,值能重复。

3.键+值这个整体我们称之为键值对或者键值对对象,在java中叫做Entry对象。

Map的常见API

Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的

package MyApi.myMap;
import java.util.HashMap;
import java.util.Map;
public class a01mymapdemo01 {
    public static void main(String[] args) {
        //1.创建map集合对象
        Map<String, String> m = new HashMap<>();
        //2.添加元素
        //put方法细节:
        //添加/覆盖
        //在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中,方法返回null
        //在添加数据的时候,如果键是存在的,那么会把原有的键值对对象覆盖,会把覆盖的值进行返回
        m.put("郭靖", "黄蓉");
        m.put("韦小宝", "沐剑屏");
        m.put("尹志平", "小龙女");
        //3.打印
        //System.out.println(m);
        //删除
        String remove = m.remove("郭靖");
        System.out.println(remove);
        //清空
        m.clear();
        //判断是否包含
        boolean key = m.containsKey("郭靖");
        System.out.println(key);
        //值是否包含
        boolean containsValue = m.containsValue("小龙女");
        System.out.println(containsValue);
        //判断集合是否为空
        boolean empty = m.isEmpty();
        System.out.println(empty);
        //集合的长度
        int size = m.size();
        System.out.println(size);
    }
}

map集合的遍历方式

1.键找值

package MyApi.myMap;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class a02Mapdemo02 {
    public static void main(String[] args) {
        //1.创建集合对象
        Map<String,String>  map=new HashMap<>();
        //2.添加元素
        map.put("郭靖", "黄蓉");
        map.put("韦小宝", "沐剑屏");
        map.put("尹志平", "小龙女");
        //3.通过键找值
        //3.1获取所有的键,把这些键放到一个单列集合当中
      Set<String> keys=  map.keySet();
      //3.2遍历每一个集合,得到每一个键
        for (String key : keys) {
            System.out.println(key);
            //3.3利用map集合中的键获取对应的值
            String value = map.get(key);
            System.out.println(key+"="+value);

        }
    }
}

2.键值对

package MyApi.myMap;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class a03Mapdemo03 {
    public static void main(String[] args) {
        //1.创建集合对象
        Map<String,String>  map=new HashMap<>();
        //2.添加元素
        map.put("郭靖", "黄蓉");
        map.put("韦小宝", "沐剑屏");
        map.put("尹志平", "小龙女");
        //3.通过键值对对象
        //3.1获取所有的键值对对象,返回一个set集合
        Set<Map.Entry<String, String>> entries = map.entrySet();
        //3.2遍历entries这个集合,去得到里面的每一个键值对对象
        for (Map.Entry<String, String> entry : entries) {
            //3.3利用entry调用get方法获取键和值
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"="+value);
        }
    }
}

3.Lamdba表达式

package MyApi.myMap;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
public class a04mymapdemo04 {
    public static void main(String[] args) {
        //1.创建map集合的对象
        Map<String,String> map=new HashMap<>();
        //2.添加元素
        map.put("郭靖", "黄蓉");
        map.put("韦小宝", "沐剑屏");
        map.put("尹志平", "小龙女");
        //3.利用lamabda表达式进行遍历
        //底层:
        //foreach其实就是利用第二种方式进行遍历,依次得到每一个键和值
        //在调用accept方法
        map.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String key, String value) {
                System.out.println(key+"="+value);
            }
        });
        System.out.println("--------");
        map.forEach((String key, String value)-> System.out.println(key+"="+value)
        );
    }
}

HashMap

1.HashMap是map里面的一个实现类

2.没有额外需要学习的特有方法,直接使用map里面的方法就可以了

3.特点都是由键决定的:无序、不重复、无索引

4.HashMap跟HashSet底层原理一模一样,都是哈希表结构

5.依赖hashCode方法和equals方法保证键的唯一性

6.如果键存储的是自定义对象,需要重写hashCode和equals方法,如果值存储自定义对象,不需要重写hashCode和equals方法。

package MyApi.myMap;
import java.util.HashMap;
import java.util.Set;

public class a05hashmapdemo05 {
    public static void main(String[] args) {
//1.创建hashMap对象
        HashMap<Student,String> hm=new HashMap<>();
        //2.创建三个学生对象
        Student s1=new Student("karry",24);
        Student s2=new Student("roy",23);
        Student s3=new Student("jackson",23);
   //3.添加元素
        hm.put(s1,"重庆");
        hm.put(s2,"重庆");
        hm.put(s3,"湖南");
        //4.遍历集合
        Set<Student> keys= hm.keySet();
        for (Student key : keys) {
            String value = hm.get(key);
            System.out.println(key+"="+value);

        }

    }
}
package MyApi.myMap;

import java.util.*;

public class a06hashmapdemo06 {
    public static void main(String[] args) {
     //1.需要先让同学们投票
     String[] arr={"a","b","c","d"};
        ArrayList<String> list=new ArrayList<>();
        Random r=new Random();
        for (int i = 0; i < 80; i++) {
           int index= r.nextInt(arr.length);
          //  System.out.println(arr[index]);
            list.add(arr[index]);
        }
        //2.统计
        HashMap<String,Integer> hm=new HashMap<>();
        for (String name : list) {
            if(hm.containsKey(name)){
                Integer count = hm.get(name);
           count++;
           hm.put(name,count);
            }else{
                hm.put(name,1);
            }
        }
        System.out.println(hm);
        //3.求最大值
        int max=0;
        Set<Map.Entry<String, Integer>> entries = hm.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            Integer value = entry.getValue();
           if(value>max) {
               max=value;
           }
        }
        System.out.println(max);
        //4.判断那个景点和最大值一样,如果一样,打印出来
        for (Map.Entry<String, Integer> entry : entries) {
            Integer value = entry.getValue();
            if(value==max) {
                System.out.println(entry.getKey());
            }
        }
    }
}

LinkedHashMap

  • 由键决定:有序、不重复、无索引

  • 这里的有序是指保证存储和取出的元素顺序一致

  • 原理:底层数据结构依然是哈希表,只是每个键值对元素又额外多了一个双链表的机制记录存储的数据

TreeMap

  • treemap和treeset底层原理一样,都是红黑树结构的

  • 由键决定特性:不重复、无索引、可排序

  • 可排序:对键进行排序

  • 注意:默认按照键的大小从小到大进行排序,也可以自己规定键的排序顺序

    代码书写两种排序规则
    • 实现Comparable接口,指定比较规则

    • 创建集合时传递Comparator比较器对象,指定比较规则。

    • 如果写的第一种也写了第二种则以第二种为准

      package MyApi.myMap;
      
      import java.util.Comparator;
      import java.util.TreeMap;
      
      public class a07Treesetdemo07 {
          public static void main(String[] args) {
              //1.创建集合对象
              TreeMap<Integer,String> tm=new TreeMap<>(new Comparator<Integer>() {
                  @Override
                  public int compare(Integer o1, Integer o2) {
                     //o1表示要添加的元素
                      //o2表示已经在红黑树中存在的元素
                      return o2-o1;
                  }
              });
              tm.put(1,"奥利奥");
              tm.put(2,"康师傅");
              tm.put(3,"九个核桃");
              tm.put(4,"雷碧");
              tm.put(5,"可口可乐");
              //3.
              System.out.println(tm);
          }
      }
      
      package MyApi.myMap;
      
      import java.util.Objects;
      
      public class Student implements  Comparable<Student>{
          private String name;
          private int age;
      
          public Student() {
          }
      
          public Student(String name, int age) {
              this.name = name;
              this.age = age;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public int getAge() {
              return age;
          }
      
          public void setAge(int age) {
              this.age = age;
          }
      
          @Override
          public String toString() {
              return "Student{" +
                      "name='" + name + '\'' +
                      ", age=" + age +
                      '}';
          }
      
          @Override
          public boolean equals(Object o) {
              if (this == o) return true;
              if (o == null || getClass() != o.getClass()) return false;
              Student student = (Student) o;
              return age == student.age && Objects.equals(name, student.name);
          }
      
          @Override
          public int hashCode() {
              return Objects.hash(name, age);
          }
      
          @Override
          public int compareTo(Student o) {
              int i = this.getAge() - o.getAge();
            i= i==0?this.getName().compareTo(o.getName()):i;
              return i;
          }
      }
      package MyApi.myMap;
      
      import java.util.TreeMap;
      
      public class a08treemapdemo08 {
          public static void main(String[] args) {
              TreeMap<Student,String> tm=new TreeMap<>();
              Student s1=new Student("karry",24);
              Student s2=new Student("roy",23);
              Student s3=new Student("jackson",23);
              tm.put(s1,"重庆");
             tm.put(s2,"重庆");
             tm.put(s3,"湖南");
              System.out.println(tm);
          }
      }
      
      统计个数
      package MyApi.myMap;
      
      import java.util.TreeMap;
      import java.util.function.BiConsumer;
      
      public class a09treesedemo09 {
          public static void main(String[] args) {
             String s="aababcabcbdabcde";
              TreeMap<Character,Integer> tm=new TreeMap<>();
              for (int i = 0; i < s.length(); i++) {
                  char c = s.charAt(i);
      if(tm.containsKey(c)){
        int count=tm.get(c)  ;
        count++;
        tm.put(c,count);
      }else {
          tm.put(c,1);
      }
              }
          StringBuilder sb=new StringBuilder();
              tm.forEach(new BiConsumer<Character, Integer>() {
                  @Override
                  public void accept(Character key, Integer value) {
                      sb.append(key).append("(").append(value).append(")");
                  }
              });
              System.out.println(sb);
          }
      }
          

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGLM:基于ChatGLM-6B使用ptuning进行微调,实现类instruction的效果

由于业务需要&#xff0c;调研下怎么训练一个虚拟角色出来&#xff0c;所以找了一些文档参考&#xff0c;其中有一个基于ChatGLM-6B使用ptuning进行微调&#xff0c;实现类instruction的效果的现成的项目&#xff0c;给大家分享下。 一、介绍 由于ChatGLM-6B 不支持instructio…

五子棋小游戏(sut实验报告)

实验目的 实现人与人或人与电脑进行五子棋对弈 实验内容 启动游戏&#xff0c;显示游戏参数设置界面&#xff0c;用户输入参数后进入游戏界面&#xff0c;显示棋盘及双方博弈过程&#xff0c;游戏过程中可选择退出游戏。判定一方获胜后结束本局游戏&#xff0c;可选择继续下…

Qt/QML编程之路:基于QWidget编程及各种2D/3D/PIC绘制的示例(45)

关于使用GWidget,这里有一个示例,看了之后很多图形绘制,控件使用,及最基本的QWidget编程都比较清楚了。ui的绘制: 运行后的界面如 工程中有非常丰富的关于各种图形的绘制,比如上图中circle,还有image。有下面一段readme的说明: # EasyQPainter Various operation pra…

容量治理三板斧:扩容、限流与降级

前言 随着现代软件系统日益复杂和用户规模的不断增长&#xff0c;分布式架构成为了保持系统高可用性与高性能的标准解决方案。然而&#xff0c;随之而来的是对系统容量治理的新挑战。在这样的背景下&#xff0c;容量治理成为了分布式系统设计和运维中不可或缺的一环。要确保系…

Java毕业设计 基于SpringBoot vue学科竞赛项目管理系统

Java毕业设计 基于SpringBoot vue学科竞赛项目管理系统 SpringBoot vue 学科竞赛项目管理系统 功能介绍 学生&#xff1a;登录 验证码 首页推广 图片轮播 竞赛通知 我的比赛队伍 组队招募 获奖通告 系统公告 统计分析 修改密码 修改个人信息 投诉建议 教师&#xff1a;登录 …

腾讯云和阿里云4核8G云服务器多少钱一年和1个月费用对比

4核8G云服务器多少钱一年&#xff1f;阿里云ECS服务器u1价格955.58元一年&#xff0c;腾讯云轻量4核8G12M带宽价格是646元15个月&#xff0c;阿腾云atengyun.com整理4核8G云服务器价格表&#xff0c;包括一年费用和1个月收费明细&#xff1a; 云服务器4核8G配置收费价格 阿里…

以某厂商方案为例,讲一下如何手工配置传统网络到SD-WAN网络的改造实施

正文共&#xff1a;1024 字 8 图&#xff0c;预估阅读时间&#xff1a;3 分钟 假设有这样一张网络&#xff0c;其中RTA和PCA表示某公司的A分支&#xff0c;通过中国电信CT路由器接入互联网ISP&#xff1b;RTB和PCB表示某公司的B分支&#xff0c;通过中国联通CU路由器接入互联网…

【webrtc】m122:PacingController 源码阅读

PacingController 关系与BitrateProber 关系更为密切PacingController 内置BitrateProber G:\CDN\signalapp_webrtc\modules\pacing\pacing_controller.hPacingControllerBitrateProber prober_;PacingController 关系与BitrateProber 关系更为密切,在整个系统中的地位也更重要…

ssm+vue的高校课程评价系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校课程评价系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

大语言模型系列-GPT-2

文章目录 前言一、GPT-2做的改进二、GPT-2的表现总结 前言 《Language Models are Unsupervised Multitask Learners&#xff0c;2019》 前文提到&#xff0c;GPT-1利用不同的模型结构微调初步解决了多任务学习的问题&#xff0c;但是仍然是预训练微调的形式&#xff0c;GPT-…

防御保护--IPSec VPN实验

防御保护--IPsec VPN实验 一、实验需求二、配置IP地址三、配置IPSec通道四、配置NAT策略4.1 配置NAT策略4.2 配置服务器映射 五、配置安全策略5.1 查看IKE协商是否建立&#xff1a; 六、配置静态路由七、测试 一、实验需求 基础配置和实验步骤可参考&#xff1a; 防御保护–防…

设计模式前置了解uml图

在开发前&#xff0c;会进行系统的设计&#xff0c;而数据模型的设计大多通过 UML 类图实现。为了在 UML 类图中清晰地表达类之间的关系&#xff0c;需要对类之间的关系有一定的认识&#xff0c;并且了解相关的表达符号。 类之间的关系有以下几种&#xff1a; 组合 聚合 关联…

202012青少年软件编程(图形化) 等级考试试卷(一级)

青少年软件编程(图形化) 等级考试试卷(一级)2020年12月 第1题:【 单选题】 下面哪个区域是“舞台区” ?( ) A:A B:B C:C D:D 【正确答案】: B 【试题解析】 : 第2题:【 单选题】 下图为小猫的初始方向, 哪个积木可以让小猫面向正右方?( ) A: B: C:…

【Linux基础(三)】信号

学习分享 1、信号的基本概念2、查看信号列表3、常见信号名称4、signal库函数5、发送信号kill6、kill - signal &#xff08;无参信号&#xff09;示例6.1、kill - signal (不可靠信号)示例6.2、kill - signal (可靠信号)示例 7、信号分类7.1、信号运行原理分类7.2、信号是否携带…

云服务器2核4G配置,阿里云和腾讯云哪个便宜?性能更好?

租用2核4G服务器费用多少&#xff1f;2核4G云服务器多少钱一年&#xff1f;1个月费用多少&#xff1f;阿里云2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年&#xff1b;腾讯云轻量2核4G服务器5M带宽165元一年、252元15个月、540元三…

【Stable Diffusion】入门:原理简介+应用安装(Windows)+生成步骤

【Stable Diffusion】入门&#xff1a;原理简介应用安装&#xff08;Windows&#xff09;生成步骤 原理简介应用安装 原理简介 稳定扩散生成模型(Stable Diffusion)是一种潜在的文本到图像扩散模型&#xff0c;能够在给定任何文本输入的情况下生成照片般逼真的图像。 应用安…

蓝桥杯2019年第十届省赛真题-修改数组

查重类题目&#xff0c;想到用标记数组记录是否出现过 但是最坏情况下可能会从头找到小尾巴&#xff0c;时间复杂度O(n2)&#xff0c;数据范围106显然超时 再细看下题目&#xff0c;我们重复进行了寻找是否出现过&#xff0c;干脆把每个元素出现过的次数k记录下来&#xff0c;直…

C++:2024/3/11

作业1&#xff1a;编程 要求&#xff1a;提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 代码&#xff1a; #include <iostream>using namespace std;int main() {//定义一个字符串string str;//提示输入字符串…

【计算机网络】1.5 分组交换网中的时延、丢包和吞吐量

A.分组交换网中的时延 当分组从一个节点沿着路径到后一节点时&#xff0c;该分组在沿途的各个节点经受了几种不同类型的时延。 时延的类型 处理时延 - d n o d a l d_{nodal} dnodal​ 处理时延包括以下部分—— a. 检查分组首部 b. 决定分组导向 排队时延 - d p r o c d_{…

华为OD机试 - 垃圾信息拦截(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&a…