- 浏览: 543568 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (340)
- Spring (4)
- Hibernate (2)
- Linux (34)
- Oracle (145)
- Eclipse (1)
- UML (1)
- HTML&&JAVASCRIPT (11)
- JAVA (33)
- 设计模式 (1)
- 版本控制 (1)
- wrap框架 (3)
- IBATIS (5)
- Ruby (1)
- DWR (1)
- MINA (11)
- JBPM (2)
- 缓存技术 (4)
- 网络 (3)
- 应用服务器 (1)
- GWT (5)
- 杂谈 (2)
- ICE (4)
- XML (2)
- ArcGis (2)
- Flex (8)
- junit单元测试 (1)
- SNMP (1)
- 存储 (1)
- office (1)
- MongoDB (0)
- Greenplum (3)
- 管理点滴 (1)
- C++ (6)
- 网络入门 (3)
- Tomcat (7)
- JMX (0)
- webservice (1)
- Oracle的10046事件 (1)
- Library cache内部机制详解 (1)
- expdp通过dblink来导入 (1)
最新评论
-
yuanliangding:
有没有关于mock的更多知识。
基于mock对象和JUnit框架简化Spring Web组件单元测试 -
saup007:
ssh端口不是22,怎么搞呢?
Greenplum 学习笔记 -
springmvc-freemarker:
java开源项目源码实例下载
Apache上全部JAVA开源项目简介 -
bobbell:
哇塞,你真厉害,整理的非常全面。我是一个java barcod ...
Greenplum 学习笔记 -
wsj55133245513324:
这不是bug,你将日志级别从debug提升到INFO 就好了 ...
Spring,smppapi,apache mina, ssl快速实现安全的smpp(5)
JavaScript 在大容量数组的循环方面效率不尽人意,我曾经做过一个比对,与VBS的数组相比较,VBS的数组循环速度大致比JS要快一个数量级。JS数组在一般的编程当中我们也不会太去注意它的效率问题:才几十个元素的数组效率即使差点你也看不出来,但节点量一大,比如几千、比如上万个节点量的数组循环,那效率问题就成了首要考虑解决的问题了。大容量数组的检索大致有以下几个应用:select做combo box时的快速匹配、树的查询、表格table排序或者检索等。
下面我来做一个测试,首先我先创建一个大容量的数组:
<SCRIPT LANGUAGE="JavaScript">
var n = 100000; //数组的最大容量
var a = new Array();
for(var i=0; i<n; i++)
{
a[i] = Math.random() +"";
}
</SCRIPT>
这样我就创建了一个长度为 100000 的字符型数组,然后我再检索字符串以 0.9999 开始的字符串,并存入另一个数组中。
<SCRIPT LANGUAGE="JavaScript">
var n = 100000; //数组的最大容量
var a = new Array();
for(var i=0; i<n; i++)
{
a[i] = Math.random() +"";
}
var begin = new Date().getTime();
var b = new Array();
for(var i=0; i<n; i++)
{
if(a[i].indexOf("0.9999")==0)
{
b[b.length] = a[i];
}
}
document.write("数组长度:"+ n);
document.write("<br>传统循环法耗时 "+ (new Date().getTime() - begin)
+" 毫秒!检索的结果:<strong title='"+ b.join(" ")
+"'>检索到 "+ b.length +" 个记录!</strong>");
</SCRIPT>
这步操作我这里耗时都在2800毫秒左右,说明一下,这里的循环非常简单,只有一个 if 判断和一个赋值操作,非常简单,若这里的判断稍微复杂一些那它的耗时将是数量级的增大。那么对于这种问题有什么好的优化方案吗?答案当然是有的,否则我开这个贴子说的全是费话了。但是对于这个问题不能再使用我们的传统思维来优化,因为在传统的思维里已经找不出再好的写法了。
解决的方案就是:先把数组join()成一个大字符串,然后用正则表达式对这个大字符串进行匹配检索。这个方法算是我的个人独创吧,在我写树的过程中想出的歪招,不过效率真的不赖。这个优化方案需要有一定的正则表达式功底。
<input id="count" value="50000" size="7" maxlength="6">
<input type="button" value="数组初始华" onclick="txt.innerHTML = array_init()"><br>
<input type="button" value="传统循环" on
欢迎光临学网,收藏本篇文章 [1] [2]
$False$
click="txt.innerHTML += method_for()">
<input type="button" value="正则匹配" onclick="txt.innerHTML += method_regexp()">
<div id="txt"></div>
<SCRIPT LANGUAGE="JavaScript">
var txt = document.getElementById("txt");
var a = new Array();
function array_init()
{
var n = parseInt(document.getElementById("count").value);
a.length = 0;
for(var i=0; i<n; i++)
{
a[i] = Math.random() +"";
}
return "数组长度:"+ n;
}
function method_for()
{
var n = a.length;
var begin = new Date().getTime();
var b = new Array();
for(var i=0; i<n; i++)
{
if(a[i].indexOf("0.9999")==0)
{
b[b.length] = a[i];
}
}
return ("<br>传统循环法耗时 "+ (new Date().getTime() - begin)
+" 毫秒!检索的结果:<strong title='"+ b.join(" ")
+"'>检索到 "+ b.length +" 个记录!</strong>");
}
function method_regexp()
{
var begin = new Date().getTime();
var b = new Array();
var s = a.join("\x0f");
var r = new RegExp().compile("0\\.9999\\d+", "g");
b = s.match(r); s = "";
return ("<br>正则匹配法耗时 "+ (new Date().getTime() - begin)
+" 毫秒!检索的结果:<strong title='"+ b.join(" ")
+"'>检索到 "+ b.length +" 个记录!</strong>");
}
</SCRIPT>
大家可以测试一下,上面两种方法之间的效率到底相差多少!代码是死的,人是活的,换一种思维换一种模式,效率将大相径庭。
这一招我是花了好多脑筋才想出来的招,真有点舍不得放出来,现在就拿它恭贺大家2006新的一年的开始吧。
资料来源:学网(www.xue5.com),原文地址:http://www.xue5.com/itedu/200802/102292.html
发表评论
-
Apache上全部JAVA开源项目简介
2011-05-12 17:16 1862最近接触Jakarta-Common-BeanU ... -
主题:JAVA NIO 简介
2011-04-15 11:48 9391. 基本 概念 IO 是主存和外部设备 ( 硬盘、终端和 ... -
JNDI在Java EE中的应用
2011-04-01 15:52 1023一、JNDI在Java EE中的应用JNDI技术是Java E ... -
Spring使用Quartz调度器 实现时间点任务(Spring in Action中文版)
2011-03-10 14:08 9547.3.2 使用Quartz调度器 Quartz调度器为调度 ... -
一个分页控件,适合大数据量。可以替换ext的分页控件
2010-11-08 15:44 1083<!doctype html public " ... -
Java的java.nio.Buffer缓冲区基础
2010-10-30 11:02 703缓冲区基础 抽象类Buffer是java.nio包支持缓 ... -
NIO ByteBuffer使用方法
2010-10-30 10:48 1216缓冲区分配和包装 在能够读和写之前,必须有一个缓冲区,用静态方 ... -
What is a Java Thread and How does it work?
2010-10-21 14:27 978A java thread is an execution c ... -
将标准的java程序封装为Windows下面的服务
2010-10-19 14:02 12781、首先到请下载最新版本的Java Service Wra ... -
HASH表原理
2010-09-19 16:43 841今天由于天气不好 ... -
使用Apache CXF创建Web Service
2009-12-30 09:30 882官方主页:http://cxf.apache.org/ ... -
java.io.File中的绝对路径和相对路径.
2009-11-12 11:26 4952File类是用来构造文件或文件夹的类,在其构造函数中要求传 ... -
谈谈JavaScript中的数组、集合及效率
2009-06-19 20:15 1102数组是JavaScript提供的一个内部对象,它是一个标准的集 ... -
log4jxml配置
2009-05-19 14:45 1077<?xml version="1.0 ... -
log4j日志配置
2009-05-19 11:54 897关键字: apache log4j 1、配置根Logg ... -
bat语法的用法
2009-05-15 14:13 1450首先,批处理文件是 ... -
JUnit学习笔记
2009-05-15 10:15 1405这是我在学习的过程中整理记录下来的,其中参考了网上许多文章 ... -
接口和抽象类的区别
2009-04-30 15:15 1376区别一,两者表达的概念不一样。抽象类是一类事物的高 ... -
如何Gwt中使用Session
2008-12-30 13:54 3105在GWT中可以直接使用session信息,只需要用r ... -
轻松实现Apache,Tomcat集群和负载均衡
2008-07-09 16:54 1029轻松实现Apache,Tomcat集群和负载均衡 ...
相关推荐
JavaScript中常用的数组方法如下: - push():向数组末尾添加一个或多个元素,并返回新的长度。 - pop():删除并返回数组的最后一个元素。 - unshift():向数组开头添加一个或多个元素,并返回新的长度。 - ...
JavaScript 是全球最流行的编程语言。 本文件整理了前端面试中的面试题。 1.请说一下数组常用的方法有哪些? push():添加到数组的最后 splice():删除指定的元素,并且在删除的位置添加元素 Sting()、toString():将...
JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)JavaScript数组(源代码)...
脸颊-深度对象密钥提取 从对象和对象数组中检索所有键和嵌套键。正在安装npm install --save deeks 例子: let keys = require ( 'deeks' ) ,docPath = require ( 'doc-path' ) ;let generatedKeys = keys . ...
javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组
js:数组的创建、数组的元素的访问、数组元素的添加、数组元素的删除、数组的截取和合并
首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象 Javascript不支持多维数组,但是因为数组里面可以...
Array-Practice:复习和练习javascript数组
JsArrayMethods:Javascript中高阶数组方法的代码示例
从数组和字符串中获取随机项。 安装 $ npm install randpick.js 用法 const randpick = require ( 'randpick.js' ) ; const emoji_array = [ ':bug:' , ':snail:' , ':hatching_chick:' , ':turtle:' , ':shark:'...
javascript 折半查找字符在数组中的位置(有序列表).docx
数组移动端 移动一个项目的array在index到的末尾array 。安装 $ npm install --save array-movetoend用法 var moveToEnd = require ( 'array-movetoend' ) ;moveToEnd ( [ 1 , 2 , 3 , 4 ] , 1 )// => [1, 3, 4, 2]...
连续类型数组 连接n个类型数组。 基于。 安装 npm install concat-typed-array 用法 import concatTypedArray from "concat-typed-array" ; concatTypedArray ( Uint8Array , Uint8Array . of ( 1 , 2 ) , Uint8...
Javascript数组及其操作
如何从C ++代码创建JavasSript数组和其他对象并将它们传递给脚本。
实验9:Java数组与字符串.doc
javascript将字符串转为数组
为普通数组和对象数组排序,对象数组排序时,可指定排序所依据的对象属性,汉字将以汉语拼音为序。
包含以下内容: shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] b:1
数组javascript中的多维数组安装 npm install tiny-ndarray要求 var NDArray = require('tiny-ndarray');用法 // Create your array by passing in the size of each dimension// Here we're creating a 3D array of...