在JavaScript中构建ArrayList示例代码


Posted in Javascript onSeptember 17, 2014

前面我们介绍了JavaScript Array 的API,在JavaScript 中 数组 本身就非常强大,可以存储任意类型,且长度自动扩容,又提供 遍历, 过滤,等多个操作数组的方法。

简直完爆Java的的数组(长度固定,单一类型)。而Java中的集合类 就是弥补数组不足,其底层大多使用Object [] 存储,只是提供动态扩容的策略,当然JDK的 API 之丰富,是其他语言难以匹敌的。

但是不妨碍我对Java、JavaScript的喜爱。

Java就像 一个中年老妇女,你总能在JDK中 看到她的 风韵犹存,在构建 大型分布式 系统,就能体现出她的 谆谆教导;

而JavaScript 就是含苞待放的 少女 ,每一次绽放 ,就会激起你 内心的 涟漪,得小心调教,才能为你所用。

好吧 原谅我不恰当的比喻,来点干货。

/** 
*@class ArrayList 
*@description 
*@time 2014-09-16 21:59 
*@author StarZou 
**/ 

function ArrayList(arr) { 
this._elementData = arr || []; 
} 

var arrayListPrototype = { 

'_arrayPrototype': Array.prototype, 

'_getData': function () { 
return this._elementData; 
}, 

'size': function () { 
return this._getData().length; 
}, 

'isEmpty': function () { 
return this.size() === 0; 
}, 

'contains': function (obj) { 
return this.indexOf(obj) > -1; 
}, 

'indexOf': function (obj) { 
var i , data = this._getData(), length = data.length; 
for (i = 0; i < length; i++) { 
if (obj === data[i]) { 
return i; 
} 
} 
return -1; 
}, 

'lastIndexOf': function (obj) { 
var i , data = this._getData(), length = data.length; 
for (i = length - 1; i > -1; i--) { 
if (obj === data[i]) { 
return i; 
} 
} 
return -1; 
}, 

'get': function (index) { 
return this._getData()[index]; 
}, 

'set': function (index, element) { 
this._getData()[index] = element; 
}, 

'add': function (index, element) { 
if (element) { 
this.set(index, element); 
} else { 
return this._getData().push(index); 
} 
}, 

'remove': function (index) { 
var oldValue = this._getData()[index]; 
this._getData()[index] = null; 
return oldValue; 
}, 

'clear': function () { 
this._getData().length = 0; 
}, 

'addAll': function (index, array) { 
if (array) { 
this._getData().splice(index, 0, array); 
} else { 
this._arrayPrototype.push.apply(this._getData(), index); 
} 
} 

}; 

ArrayList.prototype = arrayListPrototype;
// Test 代码 
var arr = new ArrayList([3, 6, 5, 'xyz', 'foo', 'xyz']); 

console.log(arr.contains('xyz')); 
console.log(arr.indexOf('xyz')); 
console.log(arr.lastIndexOf('xyz')); 
console.log(arr.get(2)); 
arr.addAll([1, 2, 3]); 
console.log(arr);

在JavaScript中构建ArrayList示例代码

上面代码实现了 一部分 ,还有优化地方,

以后 有时间 写 JavaScript 模拟 实现 Tree , Stack ,Queue ,Map 等数据结构的类。

Javascript 相关文章推荐
漂亮的仿flash菜单,来自蓝色经典
Jun 26 Javascript
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
JS对象与json字符串格式转换实例
Oct 28 Javascript
JsRender for object语法简介
Oct 31 Javascript
jQuery的ready方法详解
Nov 27 Javascript
JQuery显示隐藏页面元素的方法总结
Apr 16 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
Bootstrap Table 删除和批量删除
Sep 22 Javascript
基于vue中对鼠标划过事件的处理方式详解
Aug 22 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 Javascript
vue解决花括号数据绑定不成功的问题
Oct 30 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
Dec 11 Javascript
取得元素的左和上偏移量的方法
Sep 17 #Javascript
JS实现OCX控件的事件响应示例
Sep 17 #Javascript
javascript快速排序算法详解
Sep 17 #Javascript
js生成的验证码的实现与技术分析
Sep 17 #Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
Sep 17 #Javascript
node.js中使用q.js实现api的promise化
Sep 17 #Javascript
Javascript判断文件是否存在(客户端/服务器端)
Sep 16 #Javascript
You might like
php下统计用户在线时间的一种尝试
2010/08/26 PHP
基于PHP生成静态页的实现方法
2013/05/10 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
php解析字符串里所有URL地址的方法
2015/04/03 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[00:32]2018DOTA2亚洲邀请赛OpTic出场
2018/04/03 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
python 集合 并集、交集 Series list set 转换的实例
2018/05/29 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
python编写猜数字小游戏
2019/10/06 Python
tornado+celery的简单使用详解
2019/12/21 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
商务会议邀请函
2014/01/09 职场文书
管理信息系学生的自我评价
2014/01/11 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书