`
mwei
  • 浏览: 124235 次
  • 性别: Icon_minigender_1
  • 来自: 抽象空间
社区版块
存档分类
最新评论

new StringBuilder() VS new StringBuilder(arg)

    博客分类:
  • java
 
阅读更多
StringBuilder,非线程安全的,避免作为类变量存储信息。

//1.
StringBuilder sb_1=new StringBuilder(); //内部的字符数组长度默认为16
sb_1.append("0123456789"); //此时内部的字符数组的长度仍然是16 , 未利用空间为6
sb_1.append("abcdef");//此时内部的字符数组的长度仍然是16, 未利用空间为0
sb_1.append("N");//此时内部的字符数组的长度是34,34=(16+1)*2 , 未利用空间为17
sb_1.append("0123456789abcdefN1");//此时内部的字符数组的长度是70,70=(34+1)*2,未利用空间为35
		
//2.
StringBuilder sb_2=new StringBuilder("0123456789");//内部的字符数组长度=构造器内参数.length()+16,这里为26, 未利用空间为16
sb_2.append("abcdef"); //此时内部的字符数组长度未变,为26, 未利用空间为10
sb_2.append("N");//此时内部的字符数组长度仍然是26, 未利用空间为9
sb_2.append("0123456789abcdefN1");//此时内部的字符数组的长度是54,54=(26+1)*2,未利用空间为19
		
/**
 * 第一种方式,再追加长度为35的字符串时,内部的字符数组长度不变,仍为70,未利用空间为0.
 * 第二种方式,再追加长度为35的字符串时,内部的字符数组长度变为110,未利用空间为40.
 * 
 * 第一种方式,继续追加长度为1的字符串时,内部的字符数组长度变为142,未利用空间为71.
 * 第二种方式,继续追加长度为1的字符串时,内部的字符数组长度变为110,未利用空间为39.
 * 
 * 未利用空间对比如下:
 * 6<-->16,  0<-->10,  17<-->9,  35<-->19,  0<-->40,  19<-->39
 * 前者比上后者,小于0.5的可能性较大,大于2的可能性较小。
 * 没有采用多次随机的方式演练,但是:
 * 在拼接更长的字符串时,且目标字符串长度未知的情况下,
 * 若采用第二种方式,内部的字符数组长度的递增速度更快. 可能会浪费更多的空间.
 * 所以建议使用new StringBuilder();
 * (win32, jdk5)
 */




分享到:
评论

相关推荐

    StringBuilder类

    StringBuilder类是Java编程语言中用于处理字符串的一个重要工具,尤其在需要进行大量字符串操作或者需要优化性能的场景下,StringBuilder扮演着不可或缺的角色。与String不同,String对象的长度是固定的,一旦创建,...

    Android 生成带图像的下拉选择框列表.rar

     StringBuilder sb=new StringBuilder();//用StringBuilder动态生成信息  sb.append(getResources().getText(R.string.ys));  sb.append(":");  sb.append(tvn.getText());  tv.setText(sb.toString());//信息...

    ZString:.NET Core和Unity的零分配StringBuilder

    构造StringBuilder以避免分配生成器本身 从ThreadStatic或ArrayPool租用写入缓冲区 所有的append方法都是泛型的( Append(T value) )并直接写入缓冲区而不是连接value.ToString T1 〜 T16 AppendFormat( ...

    Android LinearLayout结合TextView选择列表项数据.rar

     StringBuilder sb=new StringBuilder();  sb.append(tvn.getText());//获取姓名信息  sb.append(" ");  sb.append(tvnL.getText());//获取描述信息  tv.setText(sb.toString());//信息设置进主界面...

    模拟soapui调用webservice

    StringBuilder response = new StringBuilder(); while ((output = br.readLine()) != null) { response.append(output); } br.close(); System.out.println(response.toString()); ``` 这段代码创建了一个连接到...

    JAVA中用动态代理类实现记忆功能(二).rar

    StringBuilder keyBuilder = new StringBuilder(); for (Object arg : args) { keyBuilder.append(arg).append(','); } return keyBuilder.toString(); } } ``` 最后,我们通过`Proxy.newProxyInstance()`...

    反射和序列化的几个简单示例

    method.Invoke(instance, new object[] { arg1, arg2 }); ``` 4. **访问属性**:`PropertyInfo`类用于访问和修改属性值。 ```csharp PropertyInfo prop = myType.GetProperty("MyProperty"); object value = prop....

    String工具箱

    public static StringBuilder append(StringBuilder sb, String[] arg) { sb.append(arg[0]); for (int i = 1, len = arg.length; i ; i++) { sb.append(","); sb.append(arg[i]); } return sb; } ``` ##### ...

    flash与C#通信 CallFunction 出现COM组件错误的处理

    StringBuilder sb = new StringBuilder(); XmlTextWriter xw = new XmlTextWriter(new StringWriter(sb)); xw.WriteStartElement("invoke"); xw.WriteAttributeString("name", Fname); xw.WriteAttributeString...

    华为OD机试C卷- 模拟目录管理功能(Java & JS & Python & C).md-私信看全套OD代码及解析

    StringBuilder sb = new StringBuilder(); for (String dir : pathStack) { sb.append(dir); if (dir != pathStack.get(pathStack.size() - 1)) { sb.append("/"); } } return sb.toString(); } public ...

    java String拼接时的问题汇总

    StringBuilder builder = new StringBuilder(); for (int i = 0; i ; i++) { builder.append("a"); } String str = builder.toString(); ``` 在上面的例子中,我们使用 StringBuilder 来创建字符串,然后使用 ...

    一个变长参数的例子 (参数不固定 源代码)

    StringBuilder result = new StringBuilder(); for (String s : strings) { result.append(s); } return result.toString(); } public static void main(String[] args) { System.out.println(concatenate(...

    Java中的字符串用法小结

    StringBuilder strBuf = new StringBuilder(""); lTime = System.currentTimeMillis(); for (int i = 0; i ; ++i) strBuf.append(String.valueOf(i)); System.out.println("Buffered String:" + (System....

    Spring来实现一个Cache简单的解决方案

    StringBuilder sb = new StringBuilder(methodName); for (Object arg : args) { sb.append("-").append(arg.toString()); } return sb.toString(); } } ``` #### 四、配置Spring AOP 为了使上面的拦截器...

    Java实现简单字符生成器代码例子

    2. `insert(int offset, arg)`方法:允许在指定的偏移量位置插入内容。在例子中,`b.insert(5, "World!")`将在索引5的位置插入"World!",结果是"HelloWorld!"。 3. `delete(int start, int end)`方法:用于删除指定...

    有关C#的25个问题

    StringBuilder sb = new StringBuilder(); sb.Append("Hello "); sb.Append("World!"); string result = sb.ToString(); ``` ### 23. 显式与隐式转换 - **隐式转换**:自动进行,无需显式转换。 - **显式转换**:...

    自定义注解实现缓存机制

    StringBuilder keyBuilder = new StringBuilder(cacheResult.cacheName()); keyBuilder.append(':').append(joinPoint.getSignature().getName()); // 添加参数到键值,例如通过ToStringBuilder for (Object arg...

    1C#中调用API函数方法.pdf

    字符串类型需要特殊处理,LPSTR、LPCSTR、LPWSTR、LPCWSTR等统一定义为string或StringBuilder,可以通过CharSet字段区分,或者在定义时使用MarshalAs定义。 ```csharp [ MarshalAs(UnmanagedType.LPTStr)] string ...

    c#动态调用DLL.pdf

    typeof(DllType).InvokeMember("DllFunction", BindingFlags.InvokeMethod, null, dllInstance, new object[] { arg1, arg2 }); ``` 在这个例子中,我们首先加载DLL,然后获取类类型,接着创建类的实例,并调用DLL...

Global site tag (gtag.js) - Google Analytics