在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 在线压缩和格式化收藏
Jan 16 Javascript
jQuery UI的Dialog无法提交问题的解决方法
Jan 11 Javascript
在JS数组特定索引处指定位置插入元素的技巧
Aug 24 Javascript
JavaScript设计模式初探
Jan 07 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
May 17 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
May 31 Javascript
JS实现仿百度文库评分功能
Jan 12 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
Sep 15 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
Oct 29 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
May 30 Javascript
js+html实现周岁年龄计算器
Jun 25 Javascript
浅谈layui分页控件field参数接收对象的问题
Sep 20 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获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
javascript 避免闭包引发的问题
2009/03/17 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
JavaScript利用fetch实现异步请求的方法实例
2017/07/26 Javascript
详解 vue better-scroll滚动插件排坑
2018/02/08 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python中删除文件的程序代码
2011/03/13 Python
Python使用MONGODB入门实例
2015/05/11 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
Python3多线程基础知识点
2019/02/19 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
GOLFINO英国官网:高尔夫服装
2020/04/11 全球购物
商学院大学生求职的自我评价
2014/03/12 职场文书
护士心得体会范文
2016/01/25 职场文书
2016年感恩母亲节活动总结
2016/04/01 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS
基于Python编写一个监控CPU的应用系统
2022/06/25 Python
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript