微信公众号要钱吗自动优化网站建设咨询
web/
2025/9/26 19:03:30/
文章来源:
微信公众号要钱吗,自动优化网站建设咨询,网站开发jsp需要什么jar包,找项目了解数据结构的人应该都听说过哈希表这种数据结构#xff0c;它是一种典型的利用键值对存储并检索数据的一种非线性结构#xff0c;又称散列表或杂凑法。在一般的线性表结构中#xff0c;数据的相对位置是随机的#xff0c;即数据和用于检索的关键字之间不存在确定的关系它是一种典型的利用键值对存储并检索数据的一种非线性结构又称散列表或杂凑法。在一般的线性表结构中数据的相对位置是随机的即数据和用于检索的关键字之间不存在确定的关系检索数据时往往需要进行一系列的比较最终找到要检索的数据这种方法往往建立在循环比较的机制上利用时间的代价节省了空间实现了数据的存储和检索功能。而哈希表则使用键值对进行数据的存储在数据的存储位置和它的关键字之间建立了一一对应的关系从而使每个关键字和结构中的一个唯一的存储位置相对应所以在检索数据时只需要根据这个对应关系便可快速定位到要查找的数据。 事实上我们通常并不关心数据是如何存储的而关心的是我们在使用数据的时候是否方便例如对数据进行排序、查找、替换等操作由于这种操作是贯穿在整个应用程序始终的因此对效率的要求也就很高了。一般的高级语言如C和C的变种都提供了用于存储哈希表的数据结构但在弱类型语言中如javascript等脚本语言本身并没有直接提供类似于哈希表的这种结构不过我们可以从数组出发按照哈希表的原理自己打造一个脚本语言专有的哈希表数据结构。 我们知道在数据中可以通过下标直接定位到相应数据也就是用于存储数据的空间数组的这种特性本身就决定了它可以被用来实现哈希算法不过在C语言中数组的下标只能是从0开始的整数而不能为其它类型的数据但在javascript中我们可以借用“对象”这个概念按照数组的特性来模拟哈希算法。因为在javascript中对象其实就是属性或方法的一个集合于是我们可以构造一个Hashtable对象它有key和value两个属性自己编写代码来模拟一个完整的哈希表。下面是一段在javascript中实现哈希表的代码 1 function Hashtable() 2 { 3 this._hash {}; 4 this._count 0; 5 this.add function(key, value) 6 { 7 if (this._hash.hasOwnProperty(key)) return false; 8 else { this._hash[key] value; this._count; return true; } 9 } 10 this.remove function(key) { delete this._hash[key]; this._count--; } 11 this.count function() { return this._count; } 12 this.items function(key) { if (this.contains(key)) return this._hash[key]; } 13 this.contains function(key) { return this._hash.hasOwnProperty(key); } 14 this.clear function() { this._hash {}; this._count 0; } 15 } 实现起来很简单我们在function中定义了一个_hash对象该对象有一个属性key我们可以给这个属性赋值hasOwnProperty方法是javascript提供的方法用于返回指定的对象中是否包含某个属性。同时我们在该function中还定义了一个_count对象用于记录Hashtable中的数据个数因为我们不想每次获取Hashtable中的数据个数时都要通过一个内置的循环来计数这样开销就会小一些前面说了哈希算法的一个基本特性就是效率高。delete语句在javascript中用于销毁一个对象。 下面是使用该Hashtable的一些例子 1 var hashCompany new Hashtable(); 2 3 //向Hashtable中添加键值对 4 function FillData(arr) { 5 hashCompany.clear(); 6 7 for (var i 0; i arr.length - 1; i) { 8 if (arr[i] ! ) { 9 t arr[i].split();10 if (t.length 2) {11 if (!hashCompany.contains(t[0].trim())) {12 hashCompany.add(t[0].trim(), t[1]);13 }14 }15 }16 }17 }18 19 //遍历Hashtable并取出值20 function GetDataFromHash() {21 var s;22 if (hashCompany.count 0) {23 for (var i in hashCompany._hash) {24 s i |;25 }26 }27 28 if (s.length 0) {29 s s.substring(0, s.length - 2);30 }31 32 return s;33 } 代码比较简单这里就不再多加说明了其中用到了一个trim函数下面补上。 //采用正则表达式去除字符串两端的空格匿名函数用于扩展String对象的方法String.prototype.trim function() { return this.replace(/(^\s*)|(\s*$)/g, ); } 哈希表在代码中使用频率很高灵活使用哈希表可以简化代码并提供诸多方便尤其是在存储类似于数组的数据并且希望之后能够方便检索。将代码保存于此以备日后使用。 转载于:https://www.cnblogs.com/yupipi520/archive/2009/03/13/1411139.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82338.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!