你好!哈希表【JAVA】

news2024/11/26 10:37:14

1.初识🎶🎶🎶

它基本上是由一个数组和一个哈希函数组成的。哈希函数将每个映射到数组的特定索引位置,这个位置被称为哈希码。当我们需要查找一个键时,哈希函数会计算其哈希码并立即返回结果,因此我们可以直接访问该索引位置并读取或修改该键的值,从而实现快速查找。

2.案例分析 🎶🎶🎶

使用哈希表存储人员信息

3.创建人员 🎶🎶🎶

/**
 * 每一位人员
 */
class Emp {
    public int id;
    public String name;
    public Emp next;

    public Emp(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

4.创建链表🎶🎶🎶

/**
 * 链表
 */
class EmpLinkList {
    private Emp head;//头节点

    /**
     * 添加员工
     */
    public void add(Emp emp) {
        if (head == null) {
            head = emp;
            return;
        }
        Emp temp = head;
        while (true) {
            if (temp.next == null) {
                break;
            }
            temp = temp.next;//指针后移
        }
        temp.next = emp;
    }

    /**
     * 遍历链表
     */
    public void list(int no) {
        if (head == null) {
            System.out.println("第" + (no + 1) + "条链表为空~");
            return;
        }
        Emp temp = head;
        while (true) {
            System.out.print("第" + (no + 1) + "链表" + "===>" + "当前用户id:" + temp.id + ",姓名:" + temp.name);
            if (temp.next == null) {
                break;
            }
            temp = temp.next;//指针后移
        }
        System.out.println();
    }

    /**
     * 查找人员
     */
    public Emp selectById(int id) {
        if (head == null) {
            System.out.println("链表为空");
            return null;
        }
        Emp temp = head;
        while (true) {
            if (temp.id == id) {//找到
                break;
            }
            if (temp.next == null) {//链表结尾
                temp = null;
                break;
            }

            temp = temp.next;
        }
        return temp;
    }

    /**
     * 删除
     */
    public void delete(int id) {
        if (head == null) {
            System.out.println("链表为空");
            return;
        }
        Emp temp = head;
        while (true) {
            if (temp.next.id == id) {//找到
                break;
            }
            if (temp.next == null) {
                break;
            }
            temp = temp.next;
        }
        temp.next = temp.next.next;
    }

5.创建哈希表🎶🎶🎶

/**
 * 哈希表
 */
class Hash {
    private EmpLinkList[] empLinkListArray;//定义个管理链表的数组
    private int size;//共有几条链表

    public Hash(int size) {
        this.size = size;
        empLinkListArray = new EmpLinkList[size];
        //初始化每一条链表
        for (int i = 0; i < size; i++) {
            empLinkListArray[i] = new EmpLinkList();
        }
    }

    /**
     * 添加人员
     */
    public void add(Emp emp) {
        //根据员工id,得到该员工应当添加到哪条链表
        int empLinkListNo = hashFun(emp.id);

        //将emp加入到对应的链表中
        empLinkListArray[empLinkListNo].add(emp);

    }

    /**
     * 遍历所有链表
     */
    public void list() {
        for (int i = 0; i < size; i++) {
            empLinkListArray[i].list(i);
        }
    }

    /**
     * 查找人员
     */
    public void select(int id) {
        //1.确定到哪条链表找
        int empLinkListNo = hashFun(id);
        Emp emp = empLinkListArray[empLinkListNo].selectById(id);
        if (emp != null) {
            System.out.println("在第" + (empLinkListNo + 1) + "条链表中找到," + "id=" + id + "的信息:" + emp);
        } else {
            System.out.println("未找到");
        }
    }

    /**
     * 删除人员
     */
    public void delete(int id) {
        int empLinkListNo = hashFun(id);
        empLinkListArray[empLinkListNo].delete(id);
    }

    /**
     * 编写散列函数取模)
     */
    public int hashFun(int id) {
        return id % size;
    }


}

6.测试🎶🎶🎶

  public static void main(String[] args) {
        Hash hash = new Hash(7);
        String key = "";
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入:");
            System.out.println("add:添加人员");
            System.out.println("list:显示人员");
            System.out.println("select:查找人员");
            System.out.println("delete:删除人员");
            System.out.println("exit:退出");
            key = scanner.next();
            switch (key) {
                case "add":
                    System.out.println("请输入id:");
                    int id = scanner.nextInt();
                    System.out.println("请输入姓名:");
                    String name = scanner.next();
                    Emp emp = new Emp(id, name);
                    hash.add(emp);
                    break;
                case "list":
                    hash.list();
                    break;
                case "select":
                    System.out.println("请输入你要查找的id:");
                    id = scanner.nextInt();
                    hash.select(id);
                    break;
                case "delete":
                    System.out.println("请输入要删除的id");
                    id = scanner.nextInt();
                    hash.delete(id);
                    break;
                case "exit":
                    System.out.println("谢谢使用~");
                    System.exit(0);
            }
        }

    }

 

 

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

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

相关文章

it统一运维平台怎么样?有可以推荐的品牌吗?

随着互联网化&#xff0c;随着信息化的不断发展&#xff0c;企业IT系统的规模和复杂性也在日益增加。在这个背景下&#xff0c;IT统一运维平台就应用而生了。它以一种全面、集成的方式管理企业IT资源&#xff0c;从而提高效率、降低成本、改善服务&#xff0c;为企业提供更快更…

Java中的Future源码讲解

JAVA Future源码解析 文章目录 JAVA Future源码解析前言一、传统异步实现的弊端二、what is Future ?2.1 Future的基本概念2.2Future 接口方法解析2.2.1 取消任务执行cancel2.2.2 检索任务是否被取消 isCancelled2.2.3 检索任务是否完成 isDone2.2.3 检索任务计算结果 get 三、…

智能优化算法应用:基于冠状病毒群体免疫算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于冠状病毒群体免疫算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于冠状病毒群体免疫算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.冠状病毒群体免疫算法4.实验…

Python标准库:time模块【侯小啾Python基础领航计划 系列(十八)】

Python标准库:time模块【侯小啾Python基础领航计划 系列(十八)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

现货黄金会面临哪些风险?

进行现货黄金投资&#xff0c;我们除了要了解怎么找到交易机会以外&#xff0c;也要知道我们交易会面临哪些风险&#xff0c;了解风险就是做到知己知彼&#xff0c;了解风险才能控制风险。控制住风险&#xff0c;才能为我们稳定盈利打好基础&#xff0c;那么下面我们就来看看在…

设计模式之创建型模式(单例、工厂方法、抽象工厂、原型、建造者)

文章目录 一、设计模式二、设计模式的六大原则三、设计模式分类四、单例设计模式五、工厂方法六、抽象工厂七、原型模式八、建造者模式 一、设计模式 设计模式&#xff08;Design pattern&#xff09;代表了最佳的实践&#xff0c;通常被有经验的面向对象的软件开发人员所采用…

TLSF算法概念,原理,内存碎片问题分析

TLSF算法介绍 TLSF&#xff08;Two-Level Segregated Fit&#xff0c;两级分割适应算法&#xff09;。 第一级&#xff08;first level,简称fl&#xff09;&#xff1a;将内存大小按2的幂次方划分一个粗粒度的范围&#xff0c;如一个72字节的空闲内存的fl是6&#xff08;72介…

Java画爱心

Java画爱心代码&#xff0c;每个人都可以被需要 效果图 源代码 package com.example.test; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.JFrame; class Cardioid extend…

具有标记和笔记功能的文件管理器TagSpaces(续)

熟悉老苏的读者都知道&#xff0c;老苏通常只是推荐软件&#xff0c;并简单介绍如何运行它们&#xff0c;而具体的功能则需要读者自行研究。这种方式让老苏能够在工作之余&#xff0c;还能保持每周发布 4 篇的更新。 然而&#xff0c;这种方式也存在明显的缺点。由于老苏没有深…

计算机基础知识65

cookie和session的使用 # 概念&#xff1a;cookie 是客户端浏览器上的键值对 # 目的&#xff1a;为了做会话保持 # 来源&#xff1a;服务端写入的&#xff0c;服务端再返回的响应头中写入&#xff0c;浏览器会自动取出来 存起来是以key value 形式&#xff0c;有过期时间、path…

深度学习在图像识别中的应用

深度学习在图像识别中的应用 摘要&#xff1a;本文介绍了深度学习在图像识别领域的应用&#xff0c;包括卷积神经网络&#xff08;CNN&#xff09;的基本原理、常见模型以及在图像识别中的优势。并通过实验展示了深度学习在图像识别中的实际应用和效果。 一、引言 随着数字化…

【踩坑记录】apex包的安装

你是不是也遇到了ModuleNotFoundError: No module named ‘packaging‘ error: subprocess-exited-with-error错误&#xff1f; apex介绍 此存储库包含nvidia维护的实用程序&#xff0c;以简化Pytorch中的混合精度和分布式训练。 这里的一些代码最终将包含在上游Pytorch中。 A…

冬季吃得过饱?羊大师教你几招消食的小妙招!

冬季吃得过饱&#xff1f;羊大师教你几招消食的小妙招&#xff01; 冬季是人们容易吃得过饱的季节&#xff0c;美食诱惑频出&#xff0c;很容易导致胃口过大&#xff0c;饭量过多&#xff0c;造成消化不良甚至影响身体健康。所以&#xff0c;如何消食&#xff0c;让胃得到缓解…

CRC(循环冗余校验)直接计算和查表法

文章目录 CRC概述CRC名词解释宽度 (WIDTH)多项式 &#xff08;POLY&#xff09;初始值 &#xff08;INIT&#xff09;结果异或值 &#xff08;XOROUT&#xff09;输入数据反转&#xff08;REFIN&#xff09;输出数据反转&#xff08;REFOUT&#xff09; CRC手算过程模二加减&am…

【深度学习笔记】09 权重衰减

09 权重衰减 范数和权重衰减利用高维线性回归实现权重衰减初始化模型参数定义 L 2 L_2 L2​范数惩罚定义训练代码实现忽略正则化直接训练使用权重衰减 权重衰减的简洁实现 范数和权重衰减 在训练参数化机器学习模型时&#xff0c;权重衰减&#xff08;decay weight&#xff09…

Chapter 6 Managing Application Engine Programs 管理应用程序引擎程序

Chapter 6 Managing Application Engine Programs 管理应用程序引擎程序 Running Application Engine Programs 运行应用程序引擎程序 This section provides an overview of program run options and discusses how to: 本节提供程序运行选项的概述&#xff0c;并讨论如何…

你知道SBTM(会话式测试管理)的最佳实践吗?

看到题目是不是感觉很陌生&#xff1f;没关系&#xff0c;今天一文讲透会话式测试管理。 一&#xff1a;什么是SBTM&#xff1f; SBTMSession-based test management会话式测试管理&#xff08;简称SBTM&#xff09;。它是一种灵活的测试方法&#xff0c;强调测试人员的自主性…

Vue学习计划--Vue2(二)Vue代理方式

Vue data中的两种方式 对象式 data:{}函数式 data(){return {} }示例&#xff1a; <body><div id"app">{{ name }} {{ age}} {{$options}}<input type"text" v-model"value"></div><script>let vm new Vue({el: …

Windows下搭建私有的MQTT服务器实现多设备间实时图传

一、前言 在Windows下使用EMQX搭建自己私有的MQTT服务器,实现多设备间实时图传效果。 测试了两种场景: 【1】图像采集端:采集电脑自己的摄像,通过MQTT协议上传到MQTT服务器,图像显示端订阅采集端的主题,获取实时图像显示。 【2】设备端:ESP32 + OV2640 采集图像上传到…

华为手环 8 五款免费表盘已上线,请注意查收

华为手环 8&#xff0c;作为一款集时尚与实用于一体的智能手环&#xff0c;不仅具备强大的功能&#xff0c;还经常更新的表盘样式&#xff0c;让用户掌控时间与健康的同时&#xff0c;也能展现自己的时尚品味。这不&#xff0c;12 月官方免费表盘又上新了&#xff0c;推出了五款…