首页 > 编程语言 >有关哈希表简单的散列函数实现-Java实现

有关哈希表简单的散列函数实现-Java实现

时间:2023-04-02 18:46:51浏览次数:38  
标签:Java public curNext Emp 哈希 return next 散列 id

其实现不难,所以直接贴代码:

  1 package dataSrtuct;
  2 
  3 import java.util.ArrayList;
  4 import java.util.LinkedList;
  5 
  6 public class HashTab {
  7     public static void main(String[] args) {
  8         hashTable hashT=new hashTable(10);
  9         hashT.addNode(new Emp(12,"Mlq"));
 10         hashT.addNode(new Emp(13,"Zbb"));
 11         hashT.addNode(new Emp(14,"Myp"));
 12         hashT.addNode(new Emp(15,"Mxp"));
 13         hashT.addNode(new Emp(16,"Mll"));
 14         hashT.addNode(new Emp(17,"Ylz"));
 15         Emp node = hashT.findNode(16);
 16         System.out.println(node.id + node.name);
 17     }
 18 }
 19 //哈希表
 20 class hashTable{
 21     private EmpList[] empLists;
 22     private Integer size;
 23     
 24     public hashTable(Integer size) {
 25         this.empLists = new EmpList[size];
 26         this.size = size;
 27         //避免为空
 28         for (int i = 0; i < empLists.length; i++) {
 29             empLists[i]=new EmpList();
 30         }
 31     }
 32 
 33     /**
 34      * 简单散列函数
 35      * @param id 标志
 36      * @return 散列值
 37      */
 38     public Integer hashCode(Integer id){
 39         return id%size;
 40     }
 41 
 42     /**
 43      * 添加节点
 44      * @param emp 目标节点
 45      */
 46     public void addNode(Emp emp){
 47         Integer hashC=hashCode(emp.id);
 48         empLists[hashC].addNode(emp);
 49     }
 50 
 51     /**
 52      * 查找节点
 53      * @param id 查找的标志
 54      * @return 目标节点
 55      */
 56     public Emp findNode(Integer id){
 57         Integer hashC=hashCode(id);
 58         return empLists[hashC].findNode(id);
 59     }
 60 }
 61 //对象信息
 62 class Emp{
 63     public Integer id;
 64     public String name;
 65     public Emp next;
 66 
 67     public Emp(Integer id, String name) {
 68         this.id = id;
 69         this.name = name;
 70     }
 71 }
 72 //单个对象链表
 73 class EmpList{
 74     public Emp head;
 75 
 76     /**
 77      * 添加哈希表的内部链表节点
 78      * @param emp 目标添加节点
 79      * @return 链表节点
 80      */
 81     public Emp addNode(Emp emp){
 82         if (head==null){
 83             head=emp;
 84         }
 85         else {
 86             Emp curNext=head;
 87             while (curNext.next!=null){
 88                 curNext=curNext.next;
 89             }
 90             curNext.next=emp;
 91         }
 92         return head;
 93     }
 94 
 95     /**
 96      * 返回查找的哈希表值
 97      * @param id 查找信息的唯一标志
 98      * @return 相对应的对象信息
 99      */
100     public Emp findNode(Integer id){
101         Emp curNext=head;
102         Emp idNext=null;
103         while(curNext!=null){
104             if (curNext.id.equals(id)){
105                 idNext=curNext;
106                 break;
107             }
108             curNext= curNext.next;
109         }
110         return idNext;
111     }
112 
113     /**
114      * 删除目标节点
115      * @param id 标志
116      * @return 删除标志,
117      */
118     public boolean deleteNode(Integer id){
119         Emp idNext=findNode(id);
120         idNext.id=idNext.next.id;
121         idNext.name=idNext.next.name;
122         idNext.next=idNext.next.next;
123         if (idNext==null)
124             return false;
125         else
126             return true;
127     }
128 
129     /**
130      * 展示当前链表的信息
131      */
132     public void listShow(){
133         if (head==null)
134             System.out.println("此链表为空");
135         else {
136             Emp curNext=head;
137             while (curNext!=null){
138                 System.out.println("此链表的信息为:");
139                 System.out.print(curNext.id +":"+ curNext.name+" ");
140                 curNext=curNext.next;
141             }
142         }
143     }
144 }

 

标签:Java,public,curNext,Emp,哈希,return,next,散列,id
From: https://www.cnblogs.com/Mexcellent/p/17280988.html

相关文章

  • leetcode 394.字符串解码 Java
    394.字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:k[encoded_string],表示其中方括号内部的encoded_string正好重复k次。注意k保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外......
  • Java SPI机制简介
    在JDBC4.0版本之前,使用DriverManager获取Connection对象之前都需要通过代码显式地加载驱动实现类,例如:JDBC4.0之后的版本对此做了改进,我们不再需要显式地加载驱动实现类。这得益于Java中的SPI机制,本节我们就来简单地了解SPI机制。SPI(ServiceProviderInterface)是JDK内置的一......
  • java数组的创建和使用
    声明数组必须先声明后使用,数组的声明有两种方法:1.C语言风格声明:dataTypearrayRefVar[];2.Java风格声明:dataType[]arrayRefVar;一般推荐使用第二种Java风格的声明方式。创建数组声明的数组并不具备物理空间,需要使用new操作符来创建数组,为其分配内存空间:dataType[......
  • mybatis OGNL表达式,xml查询中使用java的变量值
    1、参考struts2ongl访问静态变量与访问枚举Ognl表达式基本原理和使用方法2、java类packageorg.jeecg.mgt.cms.constant;publicclassEAd{publicstaticfinalIntegershow1=1;publicstaticfinalclassAA{publicstaticfinalIntegershow2......
  • leetcode 739.每日的温度 Java
    739.每日的温度给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。示例1:输入:temperatures=[73,74,75,71,69,72,76,73]输出:[1,1,4,2,1,......
  • nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http
    一、问题背景利用springboot上传大文件二、报错截图如下2023-04-0216:04:18,681ERROR[http-nio-63050-exec-6][GlobalExceptionHandler.java:58]-系统异常:Maximumuploadsizeexceeded;nestedexceptionisjava.lang.IllegalStateException:org.apache.tomcat.util.h......
  • java——spring boot集成kafka——kafka线上问题优化——如何解决消息积压问题
          ......
  • leetcode 20. 有效的括号 Java
    给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例1:输入:s="()"输出:true示例2:输入:s="()[]{}"输出:true......
  • java——spring boot集成kafka——kafka线上问题优化——如何做到顺序消费
          ......
  • java——spring boot集成kafka——kafka线上问题优化——如何防止数据丢失和重复消费
          ......