Java 数据结构之哈希表

 一 Hash表概念的介绍      

      Hash表是以键值对是以映射关系的形式将数据存在我们的数据结构中(即哈希表是用来存数据的,并且是一对一对的来存), Hash表(也称散列表)是一种能实现快速插入和查找操作的数据结构,采用根据关键码值(key)来获取对应value的方式(这就是Java中Map的形式)。把关键码值映射到Value的位置的函数称为Hash函数,而存放记录的数组就是哈希表,即Hash表。

       Hash表有优点也有缺点。优点:Hash表的查找、插入和删除操作很快,比树快很多,这由于k-v的形式,方便查找。缺点:Hash表是基于数组的,一旦创建很难改变大小,有些哈希表被基本填满时,性能会明显下降;其次,哈希表不方便顺序遍历表中数据。

       Hash化是指把待存数据存入哈希表指定位置的过程。即把数据中的关键字转换为对应的数组下标的过程,实现这个过程的函数就是Hash函数(或称散列函数)。过程如图所示,最终可以根据k1对d1进行操作,根据k2对d2进行操作,根据k3对d3进行操作。 

       过程的重点就在于Hash函数,Hash函数的基本过程如下。1:把关键字转换为唯一的整数,通常这个整数的范围很大。2:把这些整数压缩到(可以接受的)数组的索引范围。常用构造Hash函数的方法有:直接寻址法,数字分析法,平方取中法,折叠法等。然后介绍一下哈希冲突的概念,指的是不同的关键字经过Hash化后得到相同的数组下标。Hash冲突的解决方法有开放地址法和链地址法。开放地址法常用措施为线性探测。

 二 Hash应用

HashMap和Hashtable都实现了Map接口,通常创建哈希表对象时使用如下代码:              HashMap<K,V> hm= new HashMap<>();这就创建了一个key值数据类型为K、value值数据类型为V的哈希表对象hm。

使用put(K key,V value)向HashMap集合中添加元素,也称为将键值映射存放到HashMap集合中,代码样例为 hm.put("Li",18);

使用get(Object key)返回指定键所映射的值,没有该key对应的值则返回null,代码样例为int age = hm.get("Li");

使用size()返回HashMap集合中的元素数量,代码样例为int sz = hm.size();

使用clear()清空HashMap集合,代码样例为 hm.clear();

使用isEmpty()判断HashMap集合中是否有数据,如果没有则返回true,否则返回false,代码样例boolean result=hm.isEmpty();

使用remove(Object key)语句删除HashMap集合中键为key的数据,并返回其所对应的value值,样例代码为int age = hm.remove("Li");

使用values()返回HashMap集合中所有value组成的数据,且数据类型为Collection<value>,样例代码为Collection<value> con = hm.values(); 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值