ホームページ >ウェブフロントエンド >jsチュートリアル >js は Java の Map コレクションを模倣して関数を実装します

js は Java の Map コレクションを模倣して関数を実装します

大家讲道理
大家讲道理オリジナル
2016-11-10 14:41:071724ブラウズ

java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。List 适用于按数值索引访问元素的情形。

Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。本文将着重介绍核心 Java 发行套件中附带的 Map,同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用 Map。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />  
<title>测试map</title>  
</head>  
<style type="text/css">  
</style>  
<script type="text/javascript">  
/*  
 * Map对象,实现Map功能  
 * size() 获取Map元素个数  
 * isEmpty() 判断Map是否为空  
 * clear() 删除Map所有元素  
 * put(key, value) 向Map中增加元素(key, value)   
 * remove(key) 删除指定key的元素,成功返回true,失败返回false  
 * get(key) 获取指定key的元素值value,失败返回null  
 * element(index) 获取指定索引的元素(使用element.key,element.value获取key和value),失败返回null  
 * containsKey(key) 判断Map中是否含有指定key的元素  
 * containsValue(value) 判断Map中是否含有指定value的元素  
 * keys() 获取Map中所有key的数组(array)  
 * values() 获取Map中所有value的数组(array)  
 *  
 */ 
function Map(){  
    this.elements = new Array();  
    
    //获取Map元素个数  
    this.size = function() {  
        return this.elements.length;  
    },  
    
    //判断Map是否为空  
    this.isEmpty = function() {  
        return (this.elements.length < 1);  
    },  
    
    //删除Map所有元素  
    this.clear = function() {  
        this.elements = new Array();  
    },  
    
    //向Map中增加元素(key, value)   
    this.put = function(_key, _value) {  
        if (this.containsKey(_key) == true) {  
            if(this.containsValue(_value)){  
                if(this.remove(_key) == true){  
                    this.elements.push( {  
                        key : _key,  
                        value : _value  
                    });  
                }  
            }else{  
                this.elements.push( {  
                    key : _key,  
                    value : _value  
                });  
            }  
        } else {  
            this.elements.push( {  
                key : _key,  
                value : _value  
            });  
        }  
    },  
    
    //删除指定key的元素,成功返回true,失败返回false  
    this.remove = function(_key) {  
        var bln = false;  
        try {    
            for (i = 0; i < this.elements.length; i++) {    
                if (this.elements[i].key == _key){  
                    this.elements.splice(i, 1);  
                    return true;  
                }  
            }  
        }catch(e){  
            bln = false;    
        }  
        return bln;  
    },  
    
    //获取指定key的元素值value,失败返回null  
    this.get = function(_key) {  
        try{    
            for (i = 0; i < this.elements.length; i++) {  
                if (this.elements[i].key == _key) {  
                    return this.elements[i].value;  
                }  
            }  
        }catch(e) {  
            return null;    
        }  
    },  
    
    //获取指定索引的元素(使用element.key,element.value获取key和value),失败返回null  
    this.element = function(_index) {  
        if (_index < 0 || _index >= this.elements.length){  
            return null;  
        }  
        return this.elements[_index];  
    },  
    
    //判断Map中是否含有指定key的元素  
    this.containsKey = function(_key) {  
        var bln = false;  
        try {  
            for (i = 0; i < this.elements.length; i++) {    
                if (this.elements[i].key == _key){  
                    bln = true;  
                }  
            }  
        }catch(e) {  
            bln = false;    
        }  
        return bln;  
    },  
      
    //判断Map中是否含有指定value的元素  
    this.containsValue = function(_value) {  
        var bln = false;  
        try {  
            for (i = 0; i < this.elements.length; i++) {    
                if (this.elements[i].value == _value){  
                    bln = true;  
                }  
            }  
        }catch(e) {  
            bln = false;    
        }  
        return bln;  
    },  
    
    //获取Map中所有key的数组(array)  
    this.keys = function() {  
        var arr = new Array();  
        for (i = 0; i < this.elements.length; i++) {    
            arr.push(this.elements[i].key);  
        }  
        return arr;  
    },  
   
    //获取Map中所有value的数组(array)  
    this.values = function() {  
        var arr = new Array();  
        for (i = 0; i < this.elements.length; i++) {    
            arr.push(this.elements[i].value);  
        }  
        return arr;  
    };  
}  
//测试map  
alert(&#39;测试map&#39;);  
var map=new Map();  
map.put(0,0);  
map.put(1,1);  
map.put(2,2);  
alert(&#39;map的大小为:&#39;+map.size());  
for(var i=0;i<map.size();i++){  
    alert(&#39;map的key&#39;+i+&#39;对应的value值为&#39;+map.get(i));  
}  
alert(&#39;获取map中不存在的键&#39;+map.get(&#39;获取map中不存在的键&#39;));  
alert(&#39;map中的所有键的长度&#39;+map.keys().length);  
for(var i=0;i<map.keys().lenght;i++){  
    alert(&#39;map中的键值&#39;+map.keys()[i]);  
}  
alert(&#39;map中的所有的value值的长度&#39;+map.values().length);  
for(var i=0;i<map.values().length;i++){  
    alert(&#39;map中的value的值&#39;+map.values()[i]);  
}  
alert(&#39;判断map中的值value是否存在3&#39;+map.containsValue(3));  
</script>  
<body>  
测试map  
</body>  
</html>


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。