在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 相关文章推荐
jQuery创建插件的代码分析
Apr 14 Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 Javascript
js和jquery中循环的退出和继续学习记录
Sep 06 Javascript
node.js中的Socket.IO使用实例
Nov 04 Javascript
js判断某个方法是否存在实例代码
Jan 10 Javascript
JS继承用法实例分析
Feb 05 Javascript
JS数组的常见用法实例
Feb 10 Javascript
jQuery表单验证插件解析(推荐)
Jul 21 Javascript
JavaScript之WebSocket技术详解
Nov 18 Javascript
利用Vue.js实现求职在线之职位查询功能
Jul 03 Javascript
教你完全理解ReentrantLock重入锁
Jun 03 Javascript
JavaScript实现队列结构过程
Dec 06 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
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
php中如何执行linux命令详解
2018/11/06 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
微信小程序实现文件预览
2020/10/22 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
在Python中使用判断语句和循环的教程
2015/04/25 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
python实现简单遗传算法
2020/09/18 Python
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
药剂学专业应届生自荐信
2013/09/29 职场文书
大学生职业生涯规划书前言
2014/01/09 职场文书
家长给孩子的评语
2014/01/30 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
高中生期中考试失利检讨书
2014/10/23 职场文书
初三化学教学反思
2016/02/22 职场文书