怎样利用JS自定义哈希表和顺序列表
/**哈希表*/ var HashMap = function(){ this.table={}; this.count=0;//长度 /**添加对象 * @param key 键 * @param obj 对象 */ this.put=function(key,obj){ var v=this.table[key]; if(typeof(v)=="undefined")this.count+=1; this.table[key]=obj; }; /**获得对象 * @param key 键 * @return obj 对象 */ this.get=function(key){ return this.table[key]; }; this.contains=function(key){ return (key in this.table); }; /**删除对象 * @param key 键 * @return obj 对象 */ this.remove=function(key){ var obj=this.table[key]; if(obj != undefined){ delete this.table[key]; this.count -= 1; } return obj; }; /**清空所有对象*/ this.clear=function(){ this.table={}; this.count=0; }; /**当前大小*/ this.size=function(){ return this.count; }; /**是否为空*/ this.isEmpty=function(){ return this.count <= 0; }; /**获得所有值*/ this.values=function(){ var values = new Array(); for(var prop in this.table){ values.push(this.table[prop]); } return values; }; /**获得所有键*/ this.keys=function(){ var keys = new Array(); for(var prop in this.table){ keys.push(prop); } return keys; }; }; /**顺序链表*/ var ArrayList = function(){ this.count=0;//长度 this.initialCapacity = 10; this.list=new Array(this.initialCapacity); /**添加对象 * @param obj 对象 */ this.add=function(obj){ this.list[this.count]=obj; this.count+=1; }; /**按索引设置对象 * @param obj 对象 */ this.set=function(index,obj){ if(this.list.length<index){ this.list[index]=obj; return true; }else return false; }; /**获得对象 * @param index 索引位 * @return obj 对象 */ this.get=function(index){ return this.list[index]; }; /**删除对象 * @param index 索引位 * @return obj 对象 */ this.remove=function(index){ var obj=null; if(index>=0&&index<this.count){ obj = this.list[index]; for (var i = index; i < this.count - 1; i++) { this.list[i] = this.list[i + 1]; } this.list[this.count-1] = null; this.count-=1; } return obj; }; /**删除一组对象 * @param index 索引位 * @param length 长度 */ this.removeGroup=function(index,length){ if(index>=0){ var start=index;var end=index+length; var counts=0;var lists=[]; for (var i = 0; i < this.count; i++) { if(i>=start&&i<end)continue; lists[lists.length] = this.list[i]; counts++; } this.list=lists; this.count=counts; } }; /**清空所有对象*/ this.clear=function(){ this.count=0; this.list=[]; }; /**获得链表大小 * @return 返回大小 */ this.size=function(){ return this.count; }; this.getList=function(){ return this.list; }; this.setList=function(list){ this.list=list; this.count=list.length; }; /**折半查找 * @param value 对比的数据 * @return fun 对比方法 * @return 返回位置,-1为没找到 */ this.bisearch=function(value,fun){ var pos=-1; var start = 0; var end = this.count-1; var current = parseInt(this.count/2); for(var i=0;i<current;i++){ if(!fun(value,this.list[start])){ start =start+1; }else{ pos=start;break; } if(!fun(value,this.list[current])){ current =current+1;if(current>end)break; }else{ pos=current;break; } } return pos; }; /**顺序查找 * @param value 对比的数据 * @return fun 对比方法 * @return 返回位置,-1为没找到 */ this.search=function(value,fun){ var pos=-1; for(var i=0;i<this.count;i++){ if(fun(value,this.list[i])){ pos=i;break; } } return pos; }; };
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
移动端WEB开发中click,touch,tap事件使用详解
以上是怎样利用JS自定义哈希表和顺序列表的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Netflix上的头像是你流媒体身份的可视化代表。用户可以超越默认的头像来展示自己的个性。继续阅读这篇文章,了解如何在Netflix应用程序中设置自定义个人资料图片。如何在Netflix中快速设置自定义头像在Netflix中,没有内置功能来设置个人资料图片。不过,您可以通过在浏览器上安装Netflix扩展来实现此目的。首先,在浏览器上安装Netflix扩展的自定义个人资料图片。你可以在Chrome商店买到它。安装扩展后,在浏览器上打开Netflix并登录您的帐户。导航至右上角的个人资料,然后单击

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

如何在Eclipse中自定义快捷键设置?作为一名开发人员,在使用Eclipse进行编码时,熟练掌握快捷键是提高效率的关键之一。Eclipse作为一款强大的集成开发环境,不仅提供了许多默认的快捷键,还允许用户根据自己的偏好进行个性化的定制。本文将介绍如何在Eclipse中自定义快捷键设置,并给出具体的代码示例。打开Eclipse首先,打开Eclipse,并进入

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

1、下图是edius默认的屏幕布局,默认的EDIUS窗口布局是横向版式,因此在单显示器环境中,许多窗口是重叠在一起的,且预览窗口为单窗口模式。2、您可以通过【视图】菜单栏启用【双窗口模式】,使预览窗口同时显示播放窗口和录制窗口。3、您可以通过【视图菜单栏>窗口布局>常规】来恢复默认屏幕布局。另外您还可以自定义适合您的布局方式,并保存为常用屏幕布局:将窗口拖动成适合自己的布局,然后点击【视图>窗口布局>保存当前布局>新建】,在弹出的【保存当前布局】小窗口中输入布局名称,单击确定

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

在excel表格中,有时候可能需要插入坐标轴,能够更加直观地看到数据的变化趋势。还有些小伙伴不清楚怎么在表中插入坐标轴,接下来小编就跟大家分享一下excel自定义坐标轴刻度的方法吧。 坐标轴插入方法: 1、在excel界面中,选中数据。 2、在插入界面中,点击插入柱形图或条形图。 3、在展开的界面中,选择形图类型。 4、在表格右击界面中,点击选择数据。 5、在展开的界面中,进行自定义即可。
