`
hyj_dx
  • 浏览: 101392 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一个js写的StringBuffer类

阅读更多
function StringBuffer() {
	this._objArray = [];
	this._undoFlag = false;
};

StringBuffer.prototype.toString = function() {
	if(this._objArray.length==0) {
		return '';
	}
	var str = this._objArray.join('');
	if(this._objArray.length > 1) {
		this.clear();
		this.append(str);
	}
	this._undoFlag = false;
	return str;
};

StringBuffer.prototype.append = function(object) {
	this._objArray[this._objArray.length] = object;
	this._undoFlag = true;
	return this;
};

StringBuffer.prototype.clear = function() {
	this._objArray.length = 0;
	this._undoFlag = false;
};

StringBuffer.prototype.undoLastAppend = function() {
	if(this._undoFlag) {
		this._objArray.length = this._objArray.length -1;
		this._undoFlag = false;
	}
};

StringBuffer.prototype.setSize = function(size) {
	if(size==null || size<=0) {
		this.clear();
		return;
	}
	var str = this._objArray.join('');
	if(size < str.length) {
		str = str.substring(0, size);
		this.clear();
		this.append(str);
	} else if(this._objArray.length > 1) {
		this.clear();
		this.append(str);
	}
	this._undoFlag = false;
};

StringBuffer.prototype.getSize = function() {
	var str = this.toString();
	return str.length;
};

 

分享到:
评论
7 楼 fins 2008-11-20  
先不管 这个js有没有实际用处

用js 实现一个 stringbuffer 似乎是学习js的过程中必不可少的一个环节啊

我接触过很多搞js的人 他们都经历过 "用js 实现一个 stringbuffer"的考验
(很多笔试也喜欢考这题 呵呵)
要做到很完备 还是不简单的
lz这个 我只能给打70分左右, 只是实现了基本功能 很多东西考虑的不周全.

6 楼 hax 2008-11-19  
我做过测试。在字符串长度小于一定值(忘记多大了,不过至少是64k)的情况下,StringBuffer的性能是不如 + 的。因为 + 是JS操作符,得到最大优化的。

参见本篇:http://hax.iteye.com/blog/126859

至于IE,问题也不在 + 本身上。
引用
比如我们常见的字符串拼接问题,经过我的测试验证,单纯的多次创建字符串对象其实根本不是性能差的原因。要命的是在对象创建期间的无谓的垃圾回收的开销。而Array.join的方式,不会创建中间字符串对象,因此就减少了那该死的垃圾回收的开销。


IE上的测试方法很简单,就是你创建无数字符串,但是用 , 操作符连接,这样就不会触发垃圾回收,测试下来串接字符串本身并无性能问题。
5 楼 天下有鹏 2008-11-17  
hax 写道
stringbuffer其实原本是不必要的。除了IE之外,其他浏览器上stringbuffer并不能提高性能。IE的问题其实在于垃圾回收算法。等到都升级到ie7,估计就可以不用stringbuffer了。

请问hax在那里得到的“其他浏览器上stringbuffer并不能提高性能”的结论???
4 楼 hax 2008-11-16  
stringbuffer其实原本是不必要的。除了IE之外,其他浏览器上stringbuffer并不能提高性能。IE的问题其实在于垃圾回收算法。等到都升级到ie7,估计就可以不用stringbuffer了。
3 楼 myy 2008-11-16  
多此一举,直接用 数组 不就完了。
2 楼 leeight 2008-11-15  
<p>这里也有一个<br/>http://doctype.googlecode.com/svn/trunk/goog/util/stringbuffer.js</p>
<p> </p>
1 楼 逆风的香1314 2008-11-15  
这个函数好!

相关推荐

    java高级特性StringBuffer类.doc

    Java 高级特性中,StringBuffer 类是一个非常重要的类,它和 String 类一样用来代表字符串,但是由于内部实现方式的不同,StringBuffer 在进行字符串处理时,不生成新的对象,在内存使用上要优于 String 类。...

    JavaScript 利用StringBuffer类提升+=拼接字符串效率

    StringBuffer类通过维护一个字符串数组来收集字符串片段,并最终使用数组的join方法来一次性将所有的字符串片段合并成一个完整的字符串。这样做的好处是,它避免了在每次拼接时都创建新的字符串和复制字符串内容,...

    浅谈js中StringBuffer类的实现方法及使用

    总结来说,文章通过实现一个简单的StringBuffer类以及具体的使用示例,展示了在js中如何优化字符串操作以提高性能,特别是在需要重复构建和修改字符串的场景下。虽然js没有内置StringBuffer类,但通过简单的封装,...

    JAVA的StringBuffer类.docx

    Java中的`StringBuffer`类是一个非常重要的工具,特别是在处理字符串时需要频繁进行修改的情况。与`String`类不同,`StringBuffer`不会在每次修改时创建新的对象,从而减少了内存开销,提高了性能。在多线程环境中,...

    javascript下高性能字符串连接StringBuffer类

    在JavaScript中实现StringBuffer类是一个提升性能的有效方法,特别适合于需要频繁进行大量字符串连接的场景。据描述所示,使用StringBuffer类相比于使用加号连接字符串,在执行效率上可以节省大约50%的时间。这意味...

    JavaScript实现Java中StringBuffer的方法

    Javascript StringBuffer类的实现是通过prototype构造一个StringBuffer类,代码如下: function StringBuffer() { this.__strings__ = new Array(); } StringBuffer.prototype.append = function(str) { this.__...

    JavaScript中String和StringBuffer的速度之争

    显示情况时Javascript中并没有StringBuffer类,一种主流的Javascript StringBuffer类的实现是通过prototype构造一个StringBuffer类。 StringBuffer.js 代码如下: function StringBuffer(){ this.content = new Array...

    javascript之大字符串的连接的StringBuffer 类

    为了解决这个问题,我们可以借鉴Java中的`StringBuffer`或`StringBuilder`类的概念,创建一个类似的JavaScript实现来优化大字符串的拼接。 首先,让我们深入理解为什么传统方法在处理大字符串时效率低下。在...

    js实现StringBuffer的简单实例

    在Java中,StringBuffer是一个内置类,但在JavaScript中,由于语言特性,没有内置的StringBuffer类。不过,我们可以自定义一个类似于StringBuffer的功能。 以下是一个简单的JavaScript实现StringBuffer的实例: ``...

    javascript制作sql转换为stringBuffer的小工具

    本篇文章将讨论一个利用JavaScript编写的实用小工具,该工具能帮助开发者将SQL语句转换成适合Java DAO层的StringBuffer形式,从而简化SQL拼接过程。 在传统的Java Web开发中,DAO(Data Access Object)层通常负责...

    js 效率组装字符串 StringBuffer

    这是因为每次使用加号连接字符串,JavaScript都会创建一个新的字符串对象,这在处理大规模字符串时会变得非常低效。为了解决这个问题,我们可以借鉴Java中的`StringBuffer`或`StringBuilder`概念,但在JavaScript中...

    js常用类和对象

    在JavaScript中,String是一个不可变的对象,意味着一旦创建,它的内容就不能改变。当我们对String对象进行拼接操作时,实际上是创建了新的String对象,而不是在原对象上修改。例如,`"hello" + "world"`会生成一个...

    Javascript写的asp功能包

    3、ajax功能,客户端与服务器端均由javascript编写,将客户端参数和函数名经XML编码后传至服务端,服务器执行后将结果传回客户端,从而实现了ajax。 4、常用组件,如Hashtable和StringBuffer,能够提高asp应用的性能...

Global site tag (gtag.js) - Google Analytics