在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 相关文章推荐
javascript实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 Javascript
php 中序列化和json使用介绍
Jul 08 Javascript
append和appendTo的区别以及appendChild用法
Dec 24 Javascript
JS实现动态生成表格并提交表格数据向后端
Nov 25 Javascript
AngularJS用户选择器指令实例分析
Nov 04 Javascript
vuejs2.0子组件改变父组件的数据实例
May 10 Javascript
Angular2 之 路由与导航详细介绍
May 26 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
ES6中Array.includes()函数的用法
Sep 20 Javascript
vue中的数据绑定原理的实现
Jul 02 Javascript
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
取得元素的左和上偏移量的方法
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中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
JS常用排序方法实例代码解析
2020/03/03 Javascript
Vue作用域插槽实现方法及作用详解
2020/07/08 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
一个超级简单的python web程序
2014/09/11 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
python通过文件头判断文件类型
2015/10/30 Python
python如何实现远程控制电脑(结合微信)
2015/12/21 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
python读取xlsx的方法
2018/12/25 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
使用Django开发简单接口实现文章增删改查
2019/05/09 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
python enumerate内置函数用法总结
2020/01/07 Python
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
工商企业管理应届生求职信
2013/11/03 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
亲子读书活动方案
2014/02/22 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
党员示范岗材料
2014/12/19 职场文书
劳资员岗位职责
2015/02/13 职场文书