自己封装js的ArrayList类

众所周之,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]

----------------------

你可能感兴趣的:(ArrayList)