数据结构-完全hash,二级哈希java实现

发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.csdn.net/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.csdn.net/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

 

package com.data.struct;

import java.util.Random;

/**
 * 
 * @author Administrator
 *完全散列,两级散列
 */
public class CompeletHash {
	private Object [][]slot;
	private int a;//系数a
	private int b;//系数b
	private int p=101;//最大值范围,假设数据是0到100
	private int firstSlot;//一级slot数
	public CompeletHash(int slotSize){
		firstSlot=slotSize;
		slot=new Object[slotSize][];
		a=new Random().nextInt(p);
		b=new Random().nextInt(p);
		for(int i=0;i<slotSize;i++){
			Integer mi=p/firstSlot+1;
			Object [] secondSlot=new Object[mi+3];
			secondSlot[0]=mi;
			Integer ai=new Random().nextInt(p);
			Integer bi=new Random().nextInt(p);
			secondSlot[1]=ai;
			secondSlot[2]=bi;
			slot[i]=secondSlot;
		}
		secondSize=new int[firstSlot];
		System.out.println("a:"+a+" b:"+b);
	}
	private int hashFirst(int key){
		return (a*key+b)%p%firstSlot;
	}
	private int hashSecond(int key){
		return (((int)(slot[hashFirst(key)][1])*key+((int)slot[hashFirst(key)][2]))%p%((int)slot[hashFirst(key)][0]));
	}
	
	private int []secondSize;
	
	public void put(int key,int value){
		Entry entry=new Entry();
		entry.setKey(key);
		entry.setValue(value);
		if(slot[hashFirst(key)][hashSecond(key)+3]!=null){
			System.out.println("confict:"+key);
		}
		slot[hashFirst(key)][hashSecond(key)+3]=entry;
		secondSize[hashFirst(key)]+=1;
	}
	
	public Object get(int key){
		Entry entry=((Entry)slot[hashFirst(key)][hashSecond(key)+3]);
		if(entry!=null){
			return entry.getValue();
		}else{
			return null;
		}
		
	}
	
	public int size(){
		int size=0;
		for(int i=0;i<firstSlot;i++){
			for(int j=3;j<slot[i].length;j++){
				if(slot[i][j]!=null){
					size+=1;
				}
				
			}
		}
		return size;
	}
	
	public void print(){
		for(int i=0;i<firstSlot;i++){
			for(int j=3;j<slot[i].length;j++){
				if(slot[i][j]!=null){
					System.out.print("("+((Entry)slot[i][j]).getKey()+","+((Entry)slot[i][j]).getValue()+") ");
				}
				
			}
			System.out.println();
		}
		System.out.println();
		for(int i=0;i<firstSlot;i++){
			System.out.print(secondSize[i]+" ");
		}
		System.out.println();
	}
	
	public void remove(int key){
		slot[hashFirst(key)][hashSecond(key)+3]=null;
	}
	
	private static class Entry{
		private int key;
		private int value;
		public int getKey() {
			return key;
		}
		public void setKey(int key) {
			this.key = key;
		}
		public int getValue() {
			return value;
		}
		public void setValue(int value) {
			this.value = value;
		}
		
		
	}
	public static void main(String[] args) {
		CompeletHash myHash=new CompeletHash(10);
		myHash.put(33, 33);
		myHash.print();
		myHash.put(44, 44);
		myHash.put(36, 36);
		myHash.print();
		System.out.println(myHash.size());
		for(int i=1;i<100;i++){
			myHash.put(i, i);
		}
		myHash.print();
		System.out.println(myHash.size());
	}

}

第二级hash会出现冲突可能是二级a,b系数选择问题,有能解决的可以和我联系共同探讨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值