用数组实现 最简 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\n",supportArr[i]));
}else {
System.out.printf(String.format("%4d\t",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\n",targetArr[i]));
}else {
System.out.printf(String.format("%4d\t",targetArr[i]));
}
}
}
}
用数组实现 最简 hash线性探测的更多相关文章
- 线性探测再散列 建立HASH表
根据数据元素的关键字和哈希函数建立哈希表并初始化哈希表,用开放定址法处理冲突,按屏幕输出的功能表选择所需的功能实现用哈希表对数据元素的插入,显示,查找,删除. 初始化哈希表时把elem[MAXSIZE ...
- java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
java 解决Hash(散列)冲突的四种方法--开放定址法(线性探测,二次探测,伪随机探测).链地址法.再哈希.建立公共溢出区 标签: hashmaphashmap冲突解决冲突的方法冲突 2016-0 ...
- 哈希表---线性探测再散列(hash)
//哈希表---线性探测再散列 #include <iostream> #include <string> #include <stdio.h> #include ...
- Hash冲突的线性探测开放地址法
在实际应用中,无论如何构造哈希函数,冲突是无法完全避免的. 开放地址法 这个方法的基本思想是:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止.这个过程可用下式描述: ...
- java哈希表(线性探测哈希表。链式哈希表)
哈希表(散列表) 通过哈希函数使元素的存储位置与它 的关键码之间能够建立一一映射的关系,在查找时可以很快找到该元素. 哈希表hash table(key,value) 的做法其实很简单,就是把Key通 ...
- DS哈希查找--线性探测再散列
题目描述 定义哈希函数为H(key) = key%11.输入表长(大于.等于11),输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字. --程序要求-- 若使用C++只能include一个 ...
- 开放定址法——线性探测(Linear Probing)
之前我们所采用的那种方法,也被称之为封闭定址法.每个桶单元里存的都是那些与这个桶地址比如K相冲突的词条.也就是说每个词条应该属于哪个桶所对应的列表,都是在事先已经注定的.经过一个确定的哈希函数,这些绿 ...
- Java解决Hash(散列)冲突的四种方法--开放地址法(线性探测,二次探测,伪随机探测)、链地址法、再哈希、建立公共溢出区
最近时间有点紧,暂时先放参考链接了,待有时间在总结一下: 查了好多,这几篇博客写的真心好,互有优缺点,大家一个一个看就会明白了: 参考 1. 先看这个明白拉链法(链地址法),这个带源码,很好看懂,只不 ...
- 数组、链表、Hash(转)
在程序中,存放指定的数据最常用的数据结构有两种:数组和链表. 数组和链表的区别: 1.数组是将元素在内存中连续存放. 链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起. 2.数组 ...
随机推荐
- Jquery 如何设置多个attr()属性
Jquery 如何设置多个attr()属性? 文章来源:刘俊涛的博客 欢迎关注公众号.留言.评论,一起学习. _________________________________________ ...
- jQuery操作css
jQuery addClass() 方法 向被选中元素添加class属性,参数为属性值 $("div").addClass("imp"); 也可以同时向多个元素 ...
- Python之旅的开始day1
Python有哪些种类: JPython.IronPython.JavaScriptPython.RubyPython.CPython(即将开始学习种类,最为常见的种类).pypy pypy:这是用C ...
- Git 时光穿梭机
git log 提交日志 git reflog 命令日志 git status 查看状态 管理修改 git diff 工作区与暂存区 git diff master 工作区与版本库 git diff ...
- python3爬取电影数据
爬取电影票房数据,用于统计建模分析.目标网站为电影票房数据库(http://58921.com/alltime). 基本的爬取静态网站的技术,模拟登陆使用的是最简单的cookies.(这种模拟登陆的方 ...
- Bootstrap框架学习
Bootstrap框架个人总结 https://blog.csdn.net/To_Front_End/article/details/51142716 Bootstrap 教程 https://www ...
- B1027 打印沙漏
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805294251491328 1027 打印沙漏 (20 分) ...
- HDU多校第三场 Hdu6606 Distribution of books 线段树优化DP
Hdu6606 Distribution of books 题意 把一段连续的数字分成k段,不能有空段且段和段之间不能有间隔,但是可以舍去一部分后缀数字,求\(min(max((\sum ai ))\ ...
- library 中的internal power为何为负值?
下图是library中一个寄存器Q pin 的internal_power table, 表中该pin 的internal power 大多都是负值.其实library 中的internal_powe ...
- Jarvis OJ - Baby's Crack - Writeup
Jarvis OJ - Baby's Crack - Writeup M4x原创,欢迎转载,转载请表明出处 这是我第一次用爆破的方法做reverse,值得记录一下 题目: 文件下载 分析: 下载后解压 ...