- 浏览: 557422 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 1915最近接触Jakarta-Common-BeanU ... -
主题:JAVA NIO 简介
2011-04-15 11:48 9811. 基本 概念 IO 是主存和外部设备 ( 硬盘、终端和 ... -
JNDI在Java EE中的应用
2011-04-01 15:52 1057一、JNDI在Java EE中的应用JNDI技术是Java E ... -
Spring使用Quartz调度器 实现时间点任务(Spring in Action中文版)
2011-03-10 14:08 9977.3.2 使用Quartz调度器 Quartz调度器为调度 ... -
一个分页控件,适合大数据量。可以替换ext的分页控件
2010-11-08 15:44 1116<!doctype html public " ... -
Java的java.nio.Buffer缓冲区基础
2010-10-30 11:02 734缓冲区基础 抽象类Buffer是java.nio包支持缓 ... -
NIO ByteBuffer使用方法
2010-10-30 10:48 1249缓冲区分配和包装 在能够读和写之前,必须有一个缓冲区,用静态方 ... -
What is a Java Thread and How does it work?
2010-10-21 14:27 1017A java thread is an execution c ... -
将标准的java程序封装为Windows下面的服务
2010-10-19 14:02 13261、首先到请下载最新版本的Java Service Wra ... -
HASH表原理
2010-09-19 16:43 874今天由于天气不好 ... -
使用Apache CXF创建Web Service
2009-12-30 09:30 917官方主页:http://cxf.apache.org/ ... -
java.io.File中的绝对路径和相对路径.
2009-11-12 11:26 4990File类是用来构造文件或文件夹的类,在其构造函数中要求传 ... -
谈谈JavaScript中的数组、集合及效率
2009-06-19 20:15 1143数组是JavaScript提供的一个内部对象,它是一个标准的集 ... -
log4jxml配置
2009-05-19 14:45 1119<?xml version="1.0 ... -
log4j日志配置
2009-05-19 11:54 931关键字: apache log4j 1、配置根Logg ... -
bat语法的用法
2009-05-15 14:13 1481首先,批处理文件是 ... -
JUnit学习笔记
2009-05-15 10:15 1442这是我在学习的过程中整理记录下来的,其中参考了网上许多文章 ... -
接口和抽象类的区别
2009-04-30 15:15 1412区别一,两者表达的概念不一样。抽象类是一类事物的高 ... -
如何Gwt中使用Session
2008-12-30 13:54 3170在GWT中可以直接使用session信息,只需要用r ... -
轻松实现Apache,Tomcat集群和负载均衡
2008-07-09 16:54 1055轻松实现Apache,Tomcat集群和负载均衡 ...
相关推荐
JavaScript:数组与字符串操作教程.docx
### JavaScript:数组与字符串操作教程 #### 一、变量与数据类型 在JavaScript中,变量是用来存储数据值的重要工具。由于JavaScript是一种弱类型语言,因此在声明变量时无需明确指定其类型,变量的类型会根据所赋...
JavaScript中常用的数组方法如下: - push():向数组末尾添加一个或多个元素,并返回新的长度。 - pop():删除并返回数组的最后一个元素。 - unshift():向数组开头添加一个或多个元素,并返回新的长度。 - ...
脸颊-深度对象密钥提取 从对象和对象数组中检索所有键和嵌套键。正在安装npm install --save deeks 例子: let keys = require ( 'deeks' ) ,docPath = require ( 'doc-path' ) ;let generatedKeys = keys . ...
javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组 javascrip:遍历文件填充数组
在JavaScript编程语言中,数组是一种非常重要的数据结构,它允许我们存储和操作多个值在一个单一的变量中。在这个“Array-Practice”项目中,我们将会深入理解和实践JavaScript数组的各种特性和方法,这对于提升你的...
本主题探讨的是如何从C++代码中创建JavaScript数组和其他对象,并将这些对象传递给JavaScript环境。这个过程通常涉及到诸如Windows API、ATL(Active Template Library)、WTIL(Windows Template Library)以及COM...
### JavaScript 数组对象 JSON 学习笔记 #### 一、JavaScript 数组操作 在 JavaScript 中,数组是一种常用的数据结构,用于存储多个值。本部分主要介绍如何创建数组、访问数组元素以及对数组进行各种操作。 #####...
### JavaScript 数组详解 #### 一、数组的基本操作 ##### 1. 数组的创建 在 JavaScript 中,可以通过多种方式创建数组。以下是三种常见的创建数组的方法: - **使用 `new Array()` 构造函数**: - **无参数**:`...
在JavaScript中,数组作为一种...这些方法极大地提高了我们在JavaScript中处理数组的灵活性和效率,理解并熟练掌握它们对于提升编程能力至关重要。在实际开发中,根据具体需求选择合适的方法,可以简化代码,提高性能。
JavaScript 数组详细说明大全 JavaScript 中的数组是一种基本数据类型,用于存储一组相关的数据。数组可以存储各种类型的数据,包括数字、字符串、对象等。数组的使用非常广泛,以下是对 JavaScript 数组的详细说明...
JavaScript数组是编程中经常使用的一种数据结构,它提供了一系列的方法来操作和处理数组。根据这些方法是否改变原数组,可以将它们分为两类:会改变原数组的方法和不会改变原数组的方法。明确这一点对于编程来说至关...
连续类型数组 连接n个类型数组。 基于。 安装 npm install concat-typed-array 用法 import concatTypedArray from "concat-typed-array" ; concatTypedArray ( Uint8Array , Uint8Array . of ( 1 , 2 ) , Uint8...
在JavaScript中,数组是一种常用的数据结构,用于存储一系列的值。有时我们可能需要根据特定条件或索引从数组中删除元素。本篇文章将详细介绍几种在JavaScript中删除数组元素的方法,帮助开发者更好地理解和应用这些...
- 将数组元素组合成字符串:默认情况下,数组元素由逗号分隔。可以提供一个可选的参数,指定用于分隔元素的字符。例如,`arr.join()`返回`"jone,Grrgy,john"`,而`arr.join("-")`返回`"jone-Grrgy-john"`。 除此...
数组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...
这篇关于“经典ASP读取JSON字符串/生成JSON对象,数组对象等”的知识将详细介绍如何在ASP环境中处理JSON数据。 1. **JSON对象与数组的结构**: JSON对象以大括号{}表示,键值对之间用逗号分隔。键必须是字符串,用...
在JavaScript开发中,处理数据时我们经常会遇到需要去除字符串、数组、对象以及嵌套数组中的空格情况。这些空格可能是不必要的,甚至可能导致逻辑错误。本文将深入探讨如何使用极少的代码来实现这类数据结构的去空格...
在这份"JavaScript对象与数组参考大全"中,我们将深入探讨JavaScript的核心概念——对象和数组,它们是JavaScript编程的基础,也是理解和编写复杂应用的关键。 一、JavaScript对象 1. 对象定义:JavaScript对象是一...
在实际项目中,我们经常会遇到一些复杂的数组操作问题,例如在树形结构中展示数据时,返回的三维数组中可能存在某些层数组为空,需要去除掉这些空数组,得到的数组为三层,并且每一层数组都不为空。那么如何去除三维...