哈希表、映射、集合的实现与特性

哈希表

哈希表(Hash table),也叫散列表,是根据关键码值(key value)而直接进行访问的数据结构。
它提过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度。
这个映射函数叫做散列函数(Hash Function),存放记录的数组叫做哈希表。

哈希表的实现原理

假如 我们要存放一个lies字符串 如果存?我们通过哈希函数,将lies传给哈希函数之后,它就会返回一个下标,这个下标就是一个整数,这里返回的下标是个9,就把这个lies存在9的位置,像类似于这样存下来即可。哈希函数的可以有很多种,在java中,有一个叫hashcode的方法,需要我们重载一下。图中的哈希函数是,把每个数的ASCII码加在一起,再mod上一个数。

在这里插入图片描述
哈希函数,尽量需要选择好一些,这样可以避免发生碰撞,因为lies计算出来为9,其他的字符串计算出来也有可能得到9,像这种情况,我们叫做哈希碰撞。对于不同的要存储的数据,它经过哈希函数之后会得到相同的值,对应的下标都是在9这个位置。如何处理?这说明9这个位置要存多个元素,我们要做的事情也很简单,就是再增加一个维度,这个位置不止存在一个数,而是存多个数,拉出来一个链表,这样的方法叫做拉链式解决冲突法。拉出一个链表,把都应该放到9这个位置的元素依次在链表中弄出来。这时候,我们放入一个数据通过哈希得到它下标的值,这整个操作是O(1)的,也就是O(1)可以查询到它的位置。但是,很多的元素积累到相同的位置,这时候,它的查询时间就要遍历链表,为O(n)的级别。所以,我们需要找一个好的哈希函数,以此,减少它碰撞的概率。所以,在一般时候,我们都认为哈希表的查询是O(1)的
在这里插入图片描述

样例代码

 public static void main(String[] args) {
        Hashtable<String, Integer> s = new Hashtable<>();
        s.put("one",1);
        s.put("two",2);
        s.put("three",3);
        Integer two = s.get("two");
        if(two!=null){
            System.out.println(" two = "+two);
        }

在这里插入图片描述

Java 中使用的Code

Map
key-value对,key不重复

  • new HashMap( ) / new TreeMap( )
  • map.set(key,value)
  • map.get(key)
  • map.hash(key)
    获取哈希值
  • map.size( )
  • map.clear( );

Set
不重复元素的集合

  • new HashSet( ) / new TreeSet( )
  • set.add(value)
  • set.delete(value)
  • set.hash(value)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值