JS自定义哈希表和顺序列表
来源:互联网 发布:淘宝上的玫娇莎有用吗 编辑:程序博客网 时间:2024/05/07 15:34
/**哈希表*/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;};};
0 0
- JS自定义哈希表和顺序列表
- 实现jqGrid列表 css和js文件加载顺序详解
- 实现jqGrid列表 css和js文件加载顺序详解
- 散列表和顺序统计学
- 自定义数组列表和队列
- HTML学习之有序列表、无序列表和自定义列表
- js执行顺序和js异步
- 原生JS将列表子元素顺序反转
- 生成自然顺序,和自定义顺序的编号
- 用户自定义控件加载顺序和Page_PreRender
- js自定义事件和jQuery自定义事件
- js自定义对象和方法
- js自定义对象和方法
- js自定义对象和方法
- js自定义对象和方法
- js自定义类和对象
- js自定义对象和类
- js自定义类和对象
- 智利一商城违规增加店面房租 华人商户成功维权
- 现在的“微商”是刚起步的微商
- 实现简单的WebService测试用发布工具
- 第十一周项目二最大公约数
- 数据更新--UPDATE
- JS自定义哈希表和顺序列表
- 第十一周 项目二 求最大公约数
- 动漫推荐之元气囝仔
- libGDX学习笔记<二>
- 粉丝经济并不是全能的
- vim操作整理(快捷键+配置文件)
- .Net中Math.Round与四舍五入(转载)
- Java_JavaEE_轻量(SSH)_Struts2资源文件在jsp页面中显示乱码解决;
- MFC点击按钮,按钮背景改变(实现开始和暂停的转换)