用数组实现 最简 hash线性探测

Posted lms2020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用数组实现 最简 hash线性探测相关的知识,希望对你有一定的参考价值。

package arr;

import java.util.Random;

/**

  • 模拟线性寻址式hash函数
  • 模拟将1000大小包含50个数字的数组,存入大小为100的数组内(为了方便判断,我们将0的hash直接设置为0
  • 由于数字太多,所以选择random随机生成
  • @author Christie2020
    */
    public class HashDemo {
    public static void main(String[] args) {

     //制作一个测试数组
     int[] testArr = new int[1000];
     Random random = new Random();
     int[] supportArr  = new int[50];
     for (int i = 0; i < supportArr.length; i++) {
         supportArr[i] = random.nextInt(9999);
     }
    
     //输入预设置的50个数
     System.out.println("输出预设置的50个数");
     for (int i = 0; i < supportArr.length; i++) {
         if ((i+1)%5 == 0 && i != 0){
             System.out.printf(String.format("%4d
    ",supportArr[i]));
         }else {
             System.out.printf(String.format("%4d	",supportArr[i]));
         }
     }
    
     for (int i = 0; i < 50; i++) {
         testArr[random.nextInt(1000)] = supportArr[i];
     }
    
    
     HashArray hashArray = new HashArray();
     hashArray.hashArr(testArr);

    }

}
class HashArray{

//输入一个大小1000的数组

public void hashArr(int[] arr){
//创建容器数组
int[] targetArr = new int[100];
//
int temp = 0;
for (int i = 1; i < 1000; i++) {
temp = arr[i]%100;
if (arr[i] != 0){
if (targetArr[temp] == 0){ //如果当前位置为0,则直接存储
}else {//如果当前位置不为0,则顺序向下找
while (targetArr[temp] != 0 ){
if (temp <100){
temp++;
}else {
temp = 0;
}

              }
           }
           targetArr[temp] = arr[i];
       }
   }
   //输出变化后的数组
   System.out.println("输出变化后的数组");
   for (int i = 0; i < targetArr.length; i++) {
       if ((i+1)%10 == 0 && i != 0){
           System.out.printf(String.format("%4d
",targetArr[i]));
       }else {
           System.out.printf(String.format("%4d	",targetArr[i]));
       }
   }

}

}

以上是关于用数组实现 最简 hash线性探测的主要内容,如果未能解决你的问题,请参考以下文章

数据结构哈希表--线性探测和哈希桶及unordered_set,unordered_map代码示范

数据结构哈希表--线性探测和哈希桶及unordered_set,unordered_map代码示范

使用线性探测实现 Hashtable 时调整大小权衡

Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)链地址法再哈希建立公共溢出区

基于拉链式和线性探测式散列表实现Map

案例5-1.3 整型关键字的散列映射 (25分)--散列表(除留余数法+线性探测法)