利用hasOwnProperty實現的高效的javascript hashtable

來源:互聯網
上載者:User
javascript中,object的實現就是hash表,因此只要在object上封裝點方法,再利用原生的hasOwnProperty方法就可以實現簡單高效的hashtable

var HashTable = Class.create();
HashTable.prototype=
{
    initialize:function()
    {
        this._content ={};
    },
    Count:function()
    {
        var count = 0;
        for(var i in this._content) count++;
        return count;
    },
    Items:function(key)
    {
        if(this.Contains(key))
        {
            return this._content[key];
        }
    },
    Add:function(key,value)
    {
        if(this._content.hasOwnProperty(key)) 
        {
            return false;
        }
        else
        {
            this._content[key] = value;
            return true;
        }
    },
    Clear:function()
    {
        this._content  = {};
    },
    Contains:function(key)
    {
        return this._content.hasOwnProperty(key);
    },
    Remove:function(key)
    {
        delete this._content[key];
    }
}

測試如下:Code
<!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>
    <title>Untitled Page</title>

    <script src="../O.cn_My/js/prototype.js" type="text/javascript"></script>

    <script src="hashtable.js" type="text/javascript"></script>
   
</head>
<body>
        <div id="output"></div>
</body>
 <script type="text/javascript">
        var hashtable = new HashTable();
        for(var i = 0 ;i<100000;i++)
        {
            hashtable.Add(i*1.2,i);
        }
        var now = (new Date()).getTime();
        var temp ="";
        for(var i=0;i<1000;i++)
        {
             if(hashtable.Contains(1+i*2.8))
             {  
                hashtable.Remove(i*2.8);
             }
        }
        hashtable.Clear();
        $("output").innerHTML = " time pass:"+((new Date()).getTime()-now)+"ms";
        //alert(hashtable.Count());
        
    </script>
</html>

得出的結果是,100000大的hash表,進行1000次的判斷,才花費15ms. 很快的速度了,可以用來做程式的最佳化.
注意: 字串和數字相加會有糟糕的效率,導致時間多花了一倍,影響測試.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.