Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30462451
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2011-11-14 11:30:15

  1. 用hash代替数组.下面代码可直接拷贝测试:

  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
  3. <html xmlns="">
  4. <head>
  5. <title> 数组去重复 </title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <style>
  8. #contentHS, #contentAR { width: 1000px; height: 180px; }
  9. div { width:100px; height: 25px; background-color: #009900; font-size:12px; line-height: 25px; text-align: center; }
  10. #resultHS,#resultAR { width: 1000px; height: 40px; }
  11. #contentHS, #resultHS { border: 1px solid #FFCC66; background-color: #FFFFCC;}
  12. #contentAR, #resultAR { border: 1px solid #00CC00; background-color: #CEFFCE;}
  13. </style>
  14. </head>
  15. <body>
  16. <div onclick="uniStart();">测试开始</div><br/>
  17. <textarea id="contentHS"></textarea><br/><br/>
  18. <textarea id="resultHS"></textarea><br/><br/>
  19. <textarea id="contentAR"></textarea><br/><br/>
  20. <textarea id="resultAR"></textarea>
  21. <script type="text/javascript">
  22. function uniStart() {
  23.     /* 生成1000个英文字符 */
  24.     var array1 = new Array();
  25.     var array2 = new Array();
  26.     for(var i = 0; i < 1000; i++) {
  27.        array1[array1.length] = String.fromCharCode(Math.floor(Math.random()*26)+97);
  28.        array2[array2.length] = String.fromCharCode(Math.floor(Math.random()*26)+97);
  29.     }
  30.     document.getElementById('contentHS').value = '测试1000字符数组: ' + array1;
  31.     document.getElementById('contentAR').value = '测试1000字符数组: ' + array2;
  32.  
  33.     /* 方法一 Hash */
  34.     function hash_unique(array) {
  35.         var o = {};
  36.         for(var i = 0, j = 0; i < array.length; i++) {
  37.             if(typeof o[array[i]] == 'undefined') {
  38.                 o[array[i]] = j++;
  39.             }
  40.         }
  41.         array.length = 0;
  42.         for(var k in o) {
  43.             array[o[k]] = k;
  44.         }
  45.         return array;
  46.     }
  47.  
  48.     /* 方法二 数组 */
  49.     function array_unique(array) {
  50.             if (array.length < 2) return [array[0]] || [];
  51.             var arr = [];
  52.             for (var i = 0; i < array.length; i++) {
  53.                 arr.push(array.splice(i--, 1));
  54.                 for (var j = 0; j < array.length; j++) {
  55.                     if (array[j] == arr[arr.length - 1]) {
  56.                         array.splice(j--, 1);
  57.                     }
  58.                 }
  59.             }
  60.             return arr;
  61.     }
  62.     var HS = document.getElementById('resultHS'),
  63.         AR = document.getElementById('resultAR');
  64.     // 方法一测试开始
  65.     var d = new Date().getTime();
  66.     HS.value = 'HASH去重结果: ' + hash_unique(array1);
  67.     d = new Date().getTime() - d;
  68.     HS.value += '\r1000节点耗时: ' + d + '毫秒!';
  69.     // 方法二测试开始
  70.     var d2 = new Date().getTime();
  71.     AR.value = 'Array去重结果: ' + array_unique(array2);
  72.     d2 = new Date().getTime() - d2;
  73.     AR.value += '\r1000节点耗时: ' + d2 + '毫秒!';
  74. }
  75. </script>
  76. </body>
  77. </html>

  78. 可见用hash比用array筛选快的不是一个数量级
阅读(1351) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~