• javascript中的hashtable实现


    javascript中没有像c#,java那样的哈希表(hashtable),
    然而,javascript中的Array也只有一些类似于'哈希表'的非常简单功能, 如下:
    1.  var arr = new Array();
    2.  arr['item1'] = 'the value of item 1 ';
    3.  arr['item2'] = 'the value of item 2 ';
    4.  alert(arr['item1']);
    5.  alert(arr['item2']);


    但上述功能,不符我们的实际要求,另外查询遍历也不方便,我们需要在Array的基础上进行扩展,
    下面我们可以用js中的数组来实现类似的hashtable的功能,
    1. function Hashtable(){
    2.     this.clear = hashtable_clear;
    3.     this.containsKey = hashtable_containsKey;
    4.     this.containsValue = hashtable_containsValue;
    5.     this.get = hashtable_get;
    6.     this.isEmpty = hashtable_isEmpty;
    7.     this.keys = hashtable_keys;
    8.     this.put = hashtable_put;
    9.     this.remove = hashtable_remove;
    10.     this.size = hashtable_size;
    11.     this.toString = hashtable_toString;
    12.     this.values = hashtable_values;
    13.     this.hashtable = new Array();
    14. }                

    15. function hashtable_clear(){
    16.     this.hashtable = new Array();
    17. }

    18. function hashtable_containsKey(key){
    19.     var exists = false;
    20.     for (var i in this.hashtable) {
    21.         if (i == key && this.hashtable[i] != null) {
    22.             exists = true;
    23.             break;
    24.         }
    25.     }
    26.     return exists;
    27. }

    28. function hashtable_containsValue(value){
    29.     var contains = false;
    30.     if (value != null) {
    31.         for (var i in this.hashtable) {
    32.             if (this.hashtable[i] == value) {
    33.                 contains = true;
    34.                 break;
    35.             }
    36.         }
    37.     }
    38.     return contains;
    39. }

    40. function hashtable_get(key){
    41.     return this.hashtable[key];
    42. }

    43. function hashtable_isEmpty(){
    44.     return (this.size == 0) ? true : false;
    45. }

    46. function hashtable_keys(){
    47.     var keys = new Array();
    48.     for (var i in this.hashtable) {
    49.         if (this.hashtable[i] != null
    50.             keys.push(i);
    51.     }
    52.     return keys;
    53. }

    54. function hashtable_put(key, value){
    55.     if (key == null || value == null) {
    56.         throw 'NullPointerException {' + key + '},{' + value + '}';
    57.     }else{
    58.         this.hashtable[key] = value;
    59.     }
    60. }

    61. function hashtable_remove(key){
    62.     var rtn = this.hashtable[key];
    63.     //this.hashtable[key] =null;
    64.     this.hashtable.splice(key,1);
    65.     return rtn;
    66. }

    67. function hashtable_size(){
    68.     var size = 0;
    69.     for (var i in this.hashtable) {
    70.         if (this.hashtable[i] != null
    71.             size ++;
    72.     }
    73.     return size;
    74. }

    75. function hashtable_toString(){
    76.     var result = '';
    77.     for (var i in this.hashtable)
    78.     {      
    79.         if (this.hashtable[i] != null
    80.             result += '{' + i + '},{' + this.hashtable[i] + '}\n';   
    81.     }
    82.     return result;
    83. }

    84. function hashtable_values(){
    85.     var values = new Array();
    86.     for (var i in this.hashtable) {
    87.         if (this.hashtable[i] != null
    88.             values.push(this.hashtable[i]);
    89.     }
    90.     return values;
    91. }
    Hastable类使用方法:

    1. //实例化一个自定义的哈希表类
    2. var hashTable = new Hashtable();

    3. hashTable.put(0,'abc');  //0为key, 'abc'为value
    4. hashTable.put(1,'123');
    5. hashTable.put(2,'88a');
    6. hashTable.put(3,'88a');

    7. //遍历hashtable, 相当于c#和java中的foreach
    8. for (var key in hashTable.keys()){ /* 用keys方法 */
    9.     alert(hashTable.get(key)); //按key遍历value
    10. }

    11. //遍历hashtable, 相当于c#和java中的foreach
    12. for (var key in hashTable.hashtable)){ /* 用hashtable属性 */
    13.     alert(hashTable.get(key)); //按key遍历value
    14. }

    15. alert(hashTable.containsKey(1));        //返回true
    16. alert(hashTable.containsKey(4));      //因为不存在key为4的,返回false

    17. alert(
      hashTable.containsValue('888'));  //返回true
    18. alert(hashTable.containsValue('mobidogs')); //因为不存在value为'mobidogs'的,返回false

    19. hashTable.remove(1);  //移除key为1的元素
    20. alert(hashTable.containsKey(1));        //因为key为1的元素已被上行的reomve()方法移除,所以返回false

    1. //关于hastable的其它方法使用简单,读者可以自己测试 (此略)
  • 相关阅读:
    日期类型存储方法
    Log4j2的一些记录
    【Maven】学习记录
    HTML 图片加载问题
    浏览器的组成
    javascript数组的实例属性(方法)
    javascript数组的内置对象Array
    javascript之this
    css的position,float属性的理解
    简单介绍帧动画
  • 原文地址:https://www.cnblogs.com/goody9807/p/1582618.html
Copyright © 2020-2023  润新知