Java.Hash表1.0

Hash表,是根据关键码值而直接进行访问的数据结构,它通过把关键码值映射到表中的一个位置来访问记录,这种映射关系可以类似的根据数学中的开口向上的抛物线来进行描述,每个key仅对应一个value(如果在一次对应过后,再次进行key和value的对应,那么上一次的 value就会被覆盖),而一个value可能对应着不同的key。在很多时候说的哈希冲突是说在存入数据元素时是根据哈希值来进行储存的,哈希值就是根据哈希函数计算出来的,但是当两个通过哈希函数计算出的哈希值相同时就会发生冲突(因为你在一个地址里面只能存入一个数据,如果强行存入,就会导致先前的数据丢失),所以在此时就可以采用链表的方法(也可以有其他不同的方法)进行存储,具体的方法可以查找其他的资料进行学习。
key:我们输入待查找的值
value:我们想要获取的内容
hash值:key通过hash函数算出的值(对数组长度取模,便可得到数组下标)
hash函数(散列函数):存在一种函数F,根据这个函数和查找关键字key,可以直接确定查找值所在位置,而不需要一个个遍历比较。这样就预先知道key在的位置,直接找到数据,提升效率。
即地址index=F(key)
hash函数就是根据key计算出该存储地址的位置,hash表就是基于hash函数建立的一种查找表。
那么,在Hash中进行搜索的时候就相当于对Hash中的数据进行依次的对照,直到找到对应的key后的value,所以Hash中的时间复杂度为O(1)。
下面是一个简单的Hash表的使用,也是直接就赋了一定的key对应的value,方便使用。

package ji_he;
import java.util.Scanner;
import java.util.HashMap;
public class Hash_biao {
	private HashMap<Integer,String> Hash1=new HashMap<Integer,String>();
	public Hash_biao() {
		Hash1.put(1,"1");
		Hash1.put(2,"2");
		Hash1.put(3,"3");
		Hash1.put(4, "4");
	}
	public String getHash(int index){
		return Hash1.get(index);
	}
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int nu=sc.nextInt();
		Hash_biao haxi=new Hash_biao();
		String name=haxi.getHash(nu);
		System.out.println(name);
	}
}

在正常使用哈希表的时候经常考虑下列几方面:
· 计算哈希函数所需时间
· 关键字的长度
· 哈希表的大小
· 关键字的分布情况
· 记录的查找频率
哈希表是一个在空间和时间上做出权衡的经典例子。如果没有内存限制,那么可以直接将键作为数组的索引。如果没有时间限制,那么我们可以使用无序数组并进行顺序查找,这样只需要很少的内存。哈希表使用了适度的时间和空间来在这两个极端之间找到了平衡。只需要调整哈希函数算法即可在时间和空间上做出取舍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值