在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 相关文章推荐
层序遍历在ExtJs的TreePanel中的应用
Oct 16 Javascript
uploadify在Firefox下丢失session问题的解决方法
Aug 07 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 Javascript
js HTML5多媒体影音播放
Oct 17 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
Nov 20 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
Jan 13 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
Vue组件化通讯的实例代码
Jun 23 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
Jul 12 Javascript
浅谈vue中数据双向绑定的实现原理
Sep 14 Javascript
vue v-model实现自定义样式多选与单选功能
Jul 05 Javascript
jQuery treeview树形结构应用
Mar 24 jQuery
取得元素的左和上偏移量的方法
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 变量类型的强制转换
2009/10/23 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
利用php输出不同的心形图案
2016/04/22 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
React组件refs的使用详解
2018/02/09 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
python中字符串前面加r的作用
2015/06/04 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
单位介绍信范文
2014/01/18 职场文书
安全环保演讲稿
2014/08/28 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
浅谈PHP7中的一些小技巧
2021/05/29 PHP