Java集合进阶--双列集合

news2025/1/23 2:01:02

双列集合的特点:

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

2 键不能重复,值能重复

3 键和值是一一对应的,每一个键只能找到自己对应的值

4 键+值这个整体 我们称之为 “键值对” 或者 “键值对对象” ,在Java中叫做 “Entry对象”

双列集合的结构图:

红色代表接口

蓝色代表实现类

Map

Map中常用的API

- 方法介绍

  | 方法名                                                       | 说明                 |

  | -----------------------------------                        | ------------------ |

  | V   put(K key,V   value)                            | 添加元素               |

  | V   remove(Object key)                            | 根据键删除键值对元素         |

  | void   clear()                                              | 移除所有的键值对元素         |

  | boolean containsKey(Object key)          | 判断集合是否包含指定的键       |

  | boolean containsValue(Object value)    | 判断集合是否包含指定的值       |

  | boolean isEmpty()                                   | 判断集合是否为空           |

  | int size()                                                    | 集合的长度,也就是集合中键值对的个数 |

  public class MapDemo02 {
      public static void main(String[] args) {
          //创建集合对象
          Map<String,String> map = new HashMap<String,String>();

          //V put(K key,V value):添加元素
          map.put("张无忌","赵敏");
          map.put("郭靖","黄蓉");
          map.put("杨过","小龙女");

          //V remove(Object key):根据键删除键值对元素
  //        System.out.println(map.remove("郭靖"));
  //        System.out.println(map.remove("郭襄"));

          //void clear():移除所有的键值对元素
  //        map.clear();

          //boolean containsKey(Object key):判断集合是否包含指定的键
  //        System.out.println(map.containsKey("郭靖"));
  //        System.out.println(map.containsKey("郭襄"));

          //boolean isEmpty():判断集合是否为空
  //        System.out.println(map.isEmpty());

          //int size():集合的长度,也就是集合中键值对的个数
          System.out.println(map.size());

          //输出集合对象
          System.out.println(map);
      }
  }

Map集合的基本功能

- 方法介绍

  | 方法名                              | 说明           |

  | -------------------------------- | ------------ |

  | V   get(Object key)              | 根据键获取值       |

  | Set<K>   keySet()                | 获取所有键的集合     |

  | Collection<V>   values()         | 获取所有值的集合     |

  | Set<Map.Entry<K,V>>   entrySet() | 获取所有键值对对象的集合 |

Map的遍历方式

Map的第一种遍历方式(键找值)

package com.itheima.test;

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

public class test5 {
    public static void main(String[] args) {


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

        map.put("杨过","小龙女");
        map.put("郭靖","黄蓉");
        map.put("杨康","穆念慈");

        //通过键找值

        //1、获取所有的键,把这些数据放到一个单列集合中
        Set<String> keys = map.keySet();

        //遍历单列集合,得到每一个键
        for (String key : keys) {
            //通过键找值
            String value = map.get(key);
            System.out.println(key + ":" + value);
        }
        System.out.println("====================================");

        keys.forEach( key ->{
                String value = map.get(key);
                System.out.println(key + ":" + value);
            }
        );
        System.out.println("====================================");

        Iterator<String> it = keys.iterator();
        while (it.hasNext()){
            String key = it.next();
            String value = map.get(key);
            System.out.println(key + ":" + value);
        }


    }
}

Map的第二种遍历方式(根据键值对对象)

package com.itheima.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.function.Consumer;

public class test5 {
    public static void main(String[] args) {


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

        map.put("西凉锦","马超");
        map.put("麒麟弓","赵云");
        map.put("青釭剑","关羽");
        map.put("丈八蛇矛","张飞");

        //通过键值对对象进行遍历
        Set<Entry<String, String>> entries = map.entrySet();
        for (Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+"="+entry.getValue());
        }

        System.out.println("-----------------");

        entries.forEach(s -> System.out.println(s.getKey()+"="+s.getValue()));

        System.out.println("-----------------");

        Iterator<Entry<String, String>> it = entries.iterator();
        while(it.hasNext()){
            Entry<String, String> next = it.next();
            System.out.println(next.getKey()+"="+next.getValue());
        }

    }



    }

Map的第三种遍历方式(lambda表达式)

package com.itheima.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

public class test5 {
    public static void main(String[] args) {


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

        map.put("诸葛亮", "卧龙");
        map.put("张飞", "燕人张飞");
        map.put("赵云", "赵子龙");
        map.put("关羽", "关云长");
        map.put("曹操", "曹孟德");

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

        map.forEach((key, value) -> System.out.println(key + " " + value));

    }
}

HashMap

HashMap集合概述和特点

+ HashMap底层是哈希表结构的

+ 依赖hashCode方法和equals方法保证键的唯一

+ 如果键要存储的是自定义对象,需要重写hashCode和equals方法

案例1:存储学生对象并遍历

package com.itheima.test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

public class test5 {
    public static void main(String[] args) {


        HashMap<Student,String> map = new HashMap();

        Student s1 = new Student("张三",18);
        Student s2 = new Student("李四",19);
        Student s3 = new Student("王五",20);
        Student s4 = new Student("王五",20);

        map.put(s1, "北京");
        map.put(s2, "上海");
        map.put(s3, "广州");
        map.put(s4, "山东");

        Set<Student> keys = map.keySet();
        for (Student key : keys) {
            System.out.println(key + "..." + map.get(key));
        }
        System.out.println("=======================================");

        Set<Entry<Student, String>> entries = map.entrySet();
        for (Entry<Student, String> entry : entries) {
            System.out.println(entry.getKey() + "..." + entry.getValue());
        }
        System.out.println("=======================================");

        map.forEach((Student t, String u)->
                // TODO Auto-generated method stub
                System.out.println(t + "..." + u)
            );
    }
}

package com.itheima.test;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    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);
    }
}

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

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

相关文章

react hooks--useState

概述 useState 可以使函数组件像类组件一样拥有 state&#xff0c;也就说明函数组件可以通过 useState 改变 UI 视图。那么 useState 到底应该如何使用&#xff0c;底层又是怎么运作的呢&#xff0c;首先一起看一下 useState 。 问题&#xff1a;Hook 是什么? 一个 Hook 就是…

【思博伦】史上最详细思博伦测试仪使用精讲(三)!图解超赞超详细!!!

目录 2.2.14 抓包过滤条件配置 2.2.14.1 配置抓Tx或Rx方向的包 2.2.14.2 添加自定义过滤条件 2.2.14.3 按照包类型配置Qualify Events 2.2.14.4 按照包类型配置Start Events ​​​​​​​2.2.14.5 按照包类型配置Stop Events ​​​​​​​2.2.15 端口计数器统计 ​​…

大数据处理技术:HBase的安装与基本操作

目录 1 实验名称 2 实验目的 3 实验内容 4 实验原理 5 实验过程或源代码 5.1 Hbase数据库的安装 5.2 创建表 5.3 添加数据、删除数据、删除表 5.4 使用Java操作HBase 6 实验结果 6.1 Hbase数据库的安装 6.2 创建表 6.3 添加数据、删除数据、删除表 6.4 使用Java操…

25嘉士伯笔试测评希音笔试测评秋招校招SHL笔试题型分享

25嘉士伯笔试测评用的SHL笔试测评题库&#xff0c;分为两部分&#xff1a; 综合能力部分有计算题 图形推理题 连线题 逻辑题 日历题等等&#xff0c;36min24道题&#xff0c;新手很难做完&#xff1b; 岗位匹配度测评分为8道综合能力性格测试题&#xff0c;给三个选项选出最符…

【系统架构师】-论文-2024-2009年系统架构师历年论文题目

2024年5月 大数据Lambda架构的应用与分析 云原生云上DevOps运维应用与分析 模型驱动软件开发方法与应用 论单元测试在软件回归测试中的应用和分析 2023年 论面向对象设计的应用与实现 论多数据源集成的应用与实现 论软件可靠性模型的设计与实现 论边缘计算技术的设计与实现 …

Java:抽象类和接口(1)

一 抽象类 1.什么是抽象类 在 Java SE 中&#xff0c;抽象类是一种用于为其他类提供通用行为的类。它允许你定义一组方法和字段&#xff0c;而具体的实现留给子类来完成。抽象类不能被实例化&#xff0c;必须通过继承它的子类来实现其抽象方法并进行实例化。 public abstrac…

MATLAB系列04:循环结构

MATLAB系列04&#xff1a;循环结构 4. 循环结构4.1 while循环4.2 for循环4.2.1 运算的细节4.2.2 break语句和continue语句4.2.3 嵌套循环 4.3 逻辑数组和向量化4.3.1 逻辑数组的重要性4.3.2 用 if/else 结构和逻辑数组创建等式 4.4 总结 4. 循环结构 循环(loop)是一种 MATLAB …

初识Linux · 进程(4)

目录 前言&#xff1a; 进程的状态 直接谈论进程的状态 僵尸进程和孤儿进程 纯理论部分 运行态&#xff1a; 阻塞态&#xff1a; 挂起态&#xff1a; 进程的优先级以及切换问题 切换&#xff1a; 优先级&#xff1a; 前言&#xff1a; 承接上文&#xff0c;进程1到…

CPU 和 GPU:为什么GPU更适合深度学习?

目录 什么是 CPU &#xff1f; 什么是 GPU &#xff1f; GPU vs CPU 差异性对比分析 GPU 是如何工作的 &#xff1f; GPU 与 CPU 是如何协同工作的 &#xff1f; GPU vs CPU 类型解析 GPU 应用于深度学习 什么是 CPU &#xff1f; CPU&#xff08;中央处理器&#xff09;…

二叉树链式结构遍历(指针、递归)

当二叉树不使用数组实现&#xff0c;而是使用链式结构&#xff0c;用指针将节点相连时&#xff0c; 二叉树便会衍生出很多问题&#xff0c;如前序遍历、中序遍历、后序遍历、层序遍历。 下面我将用递归的方法完成二叉树的遍历。 但在这之前&#xff0c;我们还得构造链式结构…

深入解析 Apache Ranger

一. 概述 1.什么是 Apache Ranger&#xff1f; Apache Ranger 是一个为大数据平台提供集中化安全管理的开源框架&#xff0c;专门用于确保 Hadoop 生态系统中的数据安全。Ranger 通过提供细粒度的访问控制和监控&#xff0c;帮助组织实现对数据的全面安全管理&#xff0c;确保…

第四天旅游线路预览——从换乘中心到观鱼台

第四天&#xff1a;从贾登峪到喀纳斯风景区入口&#xff0c;晚上住宿贾登峪&#xff1b; 换乘中心有4 路车&#xff0c;喀纳斯②号车&#xff0c;去观鱼台&#xff0c;路程时长约20分钟&#xff1b; 将上面的的行程安排进行动态展示&#xff0c;具体步骤见”Google earth stu…

7.Jmeter数据驱动(csv数据文件设置)+Jmeter数据库操作

一、Jmeter数据驱动 因为&#xff1a;工作中&#xff0c;有些公司一个接口就是一个吻用例&#xff0c;另外一些公司一个接口有几十个用例&#xff0c;就需要用到数据驱动。 特别注意&#xff1a;断言&#xff0c;如果有共同字段&#xff0c;那么就用json断言&#xff0c;如果没…

文档管理系统Mayan EDMS的安装

今天台风 “贝碧嘉” 在上海登陆&#xff0c;这名字起的那叫一个绝&#xff0c;听起来像是 卑鄙家&#xff0c; 说的就是这台风 卑鄙到家了 什么是 EDMS&#xff1f; EDMS 代表电子文档管理系统&#xff0c;它是 DMS 的更现代版本。DMS 是文档管理系统。一种用于存储、排序和分…

二叉树的前中后序遍历(非递归迭代实现)

1.二叉树的前序遍历 1.1 思路分析 前序遍历的顺序是根-左子树-右子树&#xff0c;所以首先从根节点开始&#xff0c;顺着访问左子树&#xff1a;1、2、4。此时&#xff0c;还剩下节点1、节点2、节点3的右子树没有访问。后面倒着访问节点1、2、4的右子树就行了。所以非递归的前…

解决跨境电商平台账号无法访问的常见问题

跨境电商的迅猛发展&#xff0c;越来越多的卖家选择在全球各大电商平台如亚马逊、eBay等进行商品销售。然而&#xff0c;在实际运营过程中&#xff0c;卖家经常会遇到账号无法访问、应用打不开等问题&#xff0c;导致业务受阻。本文将针对这些问题进行详细分析&#xff0c;并提…

【医疗影像】THE BEER-LAMBERT LAW

吸光度 A l o g 10 ( I 0 I ) A log_{10}(\frac{I_0} I) Alog10​(II0​​) 如果您了解光谱仪如何工作&#xff0c;您就会知道它使一系列波长的光穿过物质溶液&#xff08;样品cell&#xff09;&#xff0c;同样地&#xff0c;也会穿过溶剂&#xff08;参考cell&#xff09; …

信息安全工程师(5)域名与域名解析

一、域名 1. 定义与功能 域名&#xff08;Domain Name&#xff09;是互联网上用于标识网站或服务器地址的名称&#xff0c;由一串由点分隔的字符组成&#xff0c;如“example.com”。域名的主要功能是提供一种便于记忆和输入的地址形式&#xff0c;以代替难以记忆的IP地址。域名…

【Axure原型】B端系统登录注册页设计成这样,就不用跟小孩一桌了

前言 在B端后台中&#xff0c;登录注册页这个东西&#xff0c;因为感觉很简单&#xff0c;所以经常不被产品经理们重视。但是登录注册页作为一个后台系统的门面&#xff0c;直接影响用户第一印象&#xff0c;又是非常重要的存在。 登录注册页的价值 B端系统登录注册页是用户…

浸没边界法空间精度相关的论文的阅读笔记

Convergence proof of the velocity field for a stokes flow immersed boundary method https://doi.org/10.1002/cpa.20233 研究对象的选取 他这里为什么能够选取一个周期性边界的流场啊&#xff1f;为什么不是狄利克雷边界或者诺伊曼边界&#xff1f; 方形流场的边界值 …