当前位置: 首页 > wzjs >正文

网站制作策划方案最佳线上网站制作模板

网站制作策划方案,最佳线上网站制作模板,徐州网架加工,广州天河区核酸检测点哈希的概念与结构 若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。对不同的关键字可能得到同一散列地址,即 k 1 ≠ k 2 k1≠k2 k1k2&…

哈希的概念与结构

  • 若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。
  • 对不同的关键字可能得到同一散列地址,即 k 1 ≠ k 2 k1≠k2 k1=k2,而 f ( k 1 ) = f ( k 2 ) f(k1)=f(k2) f(k1)=f(k2),这种现象称为冲突(英语:Colision)。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数 f ( k ) f(k) f(k)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为散列表,这一映射过程称为散列造表或散列,所得的存储位置称散列地址。
  • 在这里插入图片描述

哈希表的两个关键

  • 散列函数
    直接定址法
    数字分析法
    平方取中法
    折叠法
    随机数法
    除留余数法
  • 冲突解决
    开放定址法
    拉链法
    双散列
    再散列

实现一个HashMap

思路:实现HashMap首先确定结构为数组+链表,桶排序用的就是这个结构。其次保存数据时需要先对桶的下标做一个哈希运算,这里采用除留余数法。然后遇到哈希冲突时,采用了拉链法形成一个列表结构依次往下新增。整体来说,里面基于链表的处理比较多。

public class MyHashMap<K,V> implements IMap<K,V>{Node<K,V>[] buckets;int capacity;int size;public MyHashMap() {this.capacity = 16;this.buckets = new Node[capacity];this.size = 0;}@Overridepublic void clear() {for (int i = 0; i < buckets.length; i++) {buckets[i] = null;}}@Overridepublic boolean containsKey(K key) {int index = hash(key);if (buckets[index] == null) {return false;} else {Node<K, V> p = buckets[index];//相当于在链表中找keywhile (p != null) {K k1 = p.key;//借用java机制,hashcode和equals都来自于Object,用户可以改写这两个方法——制定对象相等的规则if (k1 == key || (k1.hashCode() == key.hashCode() && k1.equals(key))) {return true;}p = p.next;}}return false;}@Overridepublic boolean containsValue(V value) {for (int i = 0; i < buckets.length; i++) {Node<K, V> p = buckets[i];while (p != null) {if (Objects.equals(p.value, value))return true;p = p.next;}}return false;}@Overridepublic V get(K key) {int index = hash(key);if (buckets[index] != null){Node<K,V> p = buckets[index];while (p != null){K pkey = p.key;if (key == pkey || (key != null && pkey != null &&key.hashCode() == pkey.hashCode() && Objects.equals(key,pkey))){return p.value;}if (p.next == null){break;}p = p.next;}}return null;}@Overridepublic boolean isEmpty() {return size == 0;}@Overridepublic void put(K key, V value) {int index = hash(key);Node<K, V> node = new Node<>(key, value);if (buckets[index] == null){buckets[index] = node;}else {Node<K,V> p = buckets[index];while (p != null){K pkey = p.key;if (key == pkey || (key != null && pkey != null &&key.hashCode() == pkey.hashCode() && Objects.equals(key,pkey))){p.value = node.value;break;}if (p.next == null){p.next = node;size++;break;}p = p.next;}}}private int hash(K key) {if (key == null) return 0; // 或者根据设计决定如何处理 null 键//位运算正数return  (key.hashCode() & 0x7FFFFFFF) % capacity;}@Overridepublic void putAll(IMap<? extends K, ? extends V> map) {}@Overridepublic V remove(K key) {int index = hash(key);if (buckets[index] != null){Node<K,V> p = buckets[index];Node<K,V> pre = p;while (p != null){K pkey = p.key;if (key == pkey || (key != null && pkey != null &&key.hashCode() == pkey.hashCode() && Objects.equals(key,pkey))){//移除if (p == pre) {buckets[index] = pre.next;} else {pre.next = p.next;}size--;return p.value;}pre = p;p = p.next;}}return null;}@Overridepublic int size() {return size;}@Overridepublic V[] values() {return null;}private class MapInterator implements Iterator<Node> {int i = 0;Node p = buckets[0];@Overridepublic boolean hasNext() {while (this.i < capacity && p == null) {this.i++;if (this.i == capacity)p = null;elsep = buckets[this.i];}//i是一个非空的桶,p是链表头return p != null;}@Overridepublic Node next() {Node res = p;p = p.next;return res;}}public class Node<K,V>{K key;V value;Node next;public Node(K key, V value) {this.key = key;this.value = value;}@Overridepublic String toString(){return "BSTNode{" + "key=" + key + ", value=" + value + '}';}}@Overridepublic Iterator<Node> iterator() {return new MapInterator();}
}

以上实现基于固定长度的数组,没有实现扩容。以下为JAVA对HashMap的优化:

  1. HashMap的负载因子为0.75,桶中元素超过这个值时会进行扩容,且元素重新计算哈希值。
  2. 链表元素超过8个会变成红黑树。
  3. 哈希函数的优化,key.hashCode()是一个32位的int值,做了位运算后再取模。

常见的哈希算法

常见的如:取模、加每个字符、位运算二进制、乘素数等。目的都是让桶中的值分散更均匀,尽量避免冲突影响性能

public class HashFunctions {/*取余法*/static int hash1(Object x, int prime) {return x.hashCode() % prime;}/*加法*/static int additiveHash(Object key, int prime) {String objStr = key.toString();int hash = objStr.length(), i = 0;//遍历每个字符for (; i < objStr.length(); i++)hash += objStr.charAt(i);return (hash % prime);}/*利用位运算*/static int rotatingHash(String key, int prime) {int hash = key.length(), i = 0;for (; i < key.length(); ++i)hash = (hash << 4) ^ (hash >> 28) ^ key.charAt(i);return (hash % prime);}/*乘法*/static long bernstein(String key, int prime) {long h = 0;long seed = 31;//素数for (int i = 0; i != key.length(); ++i) {h = seed * h + key.charAt(i);}return h % prime;}
}

文章转载自:

http://IgurBAds.LfLsq.cn
http://eK7jwrQX.LfLsq.cn
http://xFgW1BvW.LfLsq.cn
http://beafxfwb.LfLsq.cn
http://1MPvoikd.LfLsq.cn
http://pDV9DDoR.LfLsq.cn
http://LXEJHG33.LfLsq.cn
http://VazVUPXx.LfLsq.cn
http://omKfO2zi.LfLsq.cn
http://gJINakT6.LfLsq.cn
http://I7hoQDsd.LfLsq.cn
http://7jCS7msD.LfLsq.cn
http://9R7A5Xmd.LfLsq.cn
http://agLESJzf.LfLsq.cn
http://XX32UzJk.LfLsq.cn
http://bwgufzfz.LfLsq.cn
http://crwAh4Xl.LfLsq.cn
http://yckvPbZh.LfLsq.cn
http://nNzSxoVh.LfLsq.cn
http://6Gni9JZA.LfLsq.cn
http://CuHDrM2J.LfLsq.cn
http://ef76E9Yd.LfLsq.cn
http://Xs17ofOt.LfLsq.cn
http://XC88gklD.LfLsq.cn
http://9c7Wo3c9.LfLsq.cn
http://2MLd2EYw.LfLsq.cn
http://zL6UHkJe.LfLsq.cn
http://6f9AIKX5.LfLsq.cn
http://rxvXgWlS.LfLsq.cn
http://TqDuWgxo.LfLsq.cn
http://www.dtcms.com/wzjs/654046.html

相关文章:

  • 设计师接单网站做网站要会哪些软件
  • 网站验证码插件建筑工程网格化管理
  • wordpress 网站搬迁搜索引擎优化缩写
  • 望京做网站的公司哪家好北京核子华曦检测所
  • 如何创建自己的公司网站开网站需要准备什么
  • 自助设计网站wordpress获取某分类下最新文章
  • tint-k主题做企业网站网站里的聊天怎么做
  • 帮人建网站价格公司网站策划
  • 西安哪里可以做网站公司装修费用会计分录
  • 实训报告网站开发广州seo网站策划
  • 做网站看好金石网络wordpress 标签 修改
  • 网页设计与网站建设考试名词解释app企业签名
  • 怎么建立购物网站白云怎样优化网站建设
  • 专业网站建设公司推荐同城的网站建设
  • 昆明网站建设云集创做教育网站挣钱
  • 大型网站建设济南兴田德润o评价商城网站的基本功能
  • html 网站添加悬浮二维码手机网页版网站开发
  • 网站建设 步骤电子工程网介绍
  • 类似网站的建设黄石做企业网站
  • 南山做网站公司在哪里微信公众号如何开通小程序
  • 济南制作网站的公司哪家好wordpress oracle
  • 网页设计与网站开发试卷上海网站 建设
  • wordpress网站前台密码广告制作合同
  • 网络创作网站景区网站建设费用
  • 域名注册后如何建网站微视频网站源码
  • 做一个属于自己的网站水墨风格的网站
  • 网站开发商换了简单的页面
  • wordpress更改固定链接显示404苏州网站制作排名优化
  • 电话销售企业网站怎么做虎嗅 wordpress
  • 经营网站如何挣钱创建游戏的软件