众所周之,js是没有ArrayList类的,但是js自带了Array类(虽然在js中已经是动态数组了),不过Array类使用起来还是挺别扭的,尤其是一些方法名称,更是让人摸不着头脑,于是就有了自己封装一个ArrayList类的想法。
(
function
(win) {
var
ArrayList =
function
() {
this
.datas =
[];
};
var
proto =
ArrayList.prototype;
proto.size
=
function
() {
return
this
.datas.length;
};
proto.isEmpty
=
function
() {
return
this
.size() === 0
;
};
proto.contains
=
function
(value) {
return
this
.datas.indexOf(value) !== -1
;
};
proto.indexOf
=
function
(value) {
for
(
var
index
in
this
.datas) {
if
(
this
.datas[index] ===
value) {
return
index;
}
}
return
-1
;
};
proto.lastIndexOf
=
function
(value) {
for
(
var
index =
this
.size(); index >= 0; index--
) {
if
(
this
.datas[index] ===
value) {
return
index;
}
}
};
proto.toArray
=
function
() {
return
this
.datas;
};
proto.outOfBound
=
function
(index) {
return
index < 0 || index > (
this
.size() - 1
);
};
proto.get
=
function
(index) {
if
(
this
.outOfBound(index)) {
return
null
;
}
return
this
.datas[index];
};
proto.set
=
function
(index, value) {
this
.datas[index] =
value;
};
proto.add
=
function
(value) {
this
.datas.push(value);
};
proto.insert
=
function
(index, value) {
if
(
this
.outOfBound(index)) {
return
;
}
this
.datas.splice(index, 0
, value);
};
proto.remove
=
function
(index) {
if
(
this
.outOfBound(index)) {
return
false
;
}
this
.datas.splice(index, 1
);
return
true
;
};
proto.removeValue
=
function
(value) {
if
(
this
.contains(value)) {
this
.remove(
this
.indexOf(value));
return
true
;
}
return
false
;
};
proto.clear
=
function
() {
this
.datas.splice(0,
this
.size());
};
proto.addAll
=
function
(list) {
if
(!list
instanceof
ArrayList) {
return
false
;
}
for
(
var
index
in
list.datas) {
this
.add(list.get(index));
}
return
true
;
};
proto.insertAll
=
function
(index, list) {
if
(
this
.outOfBound(index)) {
return
false
;
}
if
(!list
instanceof
ArrayList) {
return
false
;
}
var
pos =
index;
for
(
var
index
in
list.datas)
{
this
.insert(pos++
, list.get(index));
}
return
true
;
};
function
numberorder(a, b) {
return
a -
b;
}
proto.sort
=
function
(isNumber){
if
(isNumber){
this
.datas.sort(numberorder);
return
;
}
this
.datas.sort();
};
proto.toString
=
function
(){
return
"[" +
this
.datas.join() + "]"
;
};
proto.valueOf
=
function
(){
return
this
.toString();
};
win.ArrayList
=
ArrayList;
})(window);
我们写一个页面测试一下。
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
>
<
html
>
<
head
>
<
meta
http-equiv
="Content-Type"
content
="text/html; charset=UTF-8"
>
<
title
>
Insert title here
</
title
>
<
script
type
="text/javascript"
src
="ArrayList.js"
></
script
>
<
script
type
="text/javascript"
>
window.print
=
function
(value) {
document.write(value);
};
window.println
=
function
(value) {
print(value);
document.write(
"
<br/>
"
);
};
window.onload
=
function
()
{
var
list
=
new
ArrayList();
list.add(
"
jack
"
);
list.add(
43
);
list.add(
true
);
println(list.get(
0
));
println(list.get(
1
));
println(list.get(
2
));
println(list.get(
3
));
println(
"
----------------------
"
);
println(list.size());
list.remove(
2
);
println(list);
println(
"
----------------------
"
);
println(list.isEmpty());
list.clear();
println(list.isEmpty());
println(
"
----------------------
"
);
list.add(
"
jack
"
);
list.add(
43
);
list.add(
true
);
var
list2
=
new
ArrayList();
list2.addAll(list);
println(list2);
println(
"
----------------------
"
);
list2.insert(
1
,
"
male
"
);
println(list2);
println(
"
----------------------
"
);
list2.removeValue(
true
);
println(list2);
println(
"
----------------------
"
);
list2.insertAll(
2
,list);
println(list2);
println(
"
----------------------
"
);
println(list2.contains(
"
jack
"
));
println(
"
----------------------
"
);
list2.clear();
list2.add(
1111
);
list2.add(
222
);
list2.add(
33
);
list2.add(
4
);
list2.sort();
//
按字母顺序排
println(list2);
println(
"
----------------------
"
);
list2.sort(
true
);
//
按数字顺序排
println(list2);
println(
"
----------------------
"
);
}
</
script
>
</
head
>
<
body
>
</
body
>
</
html
>
输出结果如下:
jack
43
true
null
----------------------
3
[jack,43]
----------------------
false
true
----------------------
[jack,43,true]
----------------------
[jack,male,43,true]
----------------------
[jack,male,43]
----------------------
[jack,male,jack,43,true,43]
----------------------
true
----------------------
[1111,222,33,4]
----------------------
[4,33,222,1111]
----------------------

