java-API之StringBuilder类型

StringBuilder创建对象

// StringBuilder() 构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
StringBuilder sb = new StringBuilder();

常用方法

在 StringBuilder 上的主要操作是 append 和 insert 方法。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。

StringBuilder sb = new StringBuilder();
System.out.println(  sb.append("app") );
System.out.println(  sb.append("le") ); // apple

StringBuilder sb2 = new StringBuilder();
sb2.append("le");
System.out.println(  sb.insert(0,"app") );  // apple

字符串拼接效率问题及解决方法

我们都知道字符串可以通过“+”进行连接,但是这种方式方式效率如何,下面让我们测试下:

    public class Test_StringBuilder {
    public static void main(String[] args) {
        StringConcat();// + 拼接字符串,拼接10000次
    }
        /*
     * 将字符串通过 + 连接 10000次
     * 通过运行之间判断效率如何?
     */
    public static void StringConcat() {
//      定义字符串
        String str = "abcdefghijklmnopqrstuvwxyz";
        String result = "";

        long start = System.currentTimeMillis(); //计时开始ms
//      拼接字符串
        for (int i = 0; i < 10000; i++) {
            result += str;
        }
        long end = System.currentTimeMillis(); // 计时结束ms
//      打印拼接结果
        System.out.println(end-start);  //3248ms => 3.2s
    }

}

通过上述代码的运行,可以看到,运行之间需要3秒多,这效率确实有点低,但是到底有多低呢?我们再在测试StringBuilder比较下。在Test_StringBuilder类中添加如下方法

    public static void StringBuilderConcat() {
    String str = "abcdefghijklmnopqrstuvwxyz";
    StringBuilder sb = new StringBuilder();

    long start = System.currentTimeMillis(); //计时开始ms
    for (int i = 0; i < 10000; i++) {
        sb.append(str);
    }
    long end = System.currentTimeMillis(); // 计时结束ms
    System.out.println(end-start);  // 3ms
    }

在main方法中进行调用该方法:

StringBuilderConcat(); // StringBuilder连接字符串,连接10000次

通过上述此时,我们可以得出StringBuider的测试结果为3ms,当然每台电脑的运行结果可能都不一定相同,但是通过对比我们就真实体会到StringBuilder拼接字符的效率比String要高好几千倍,真实没有对比就没有伤害啊。
相比大家都知道了,我们工作时,需要字符串拼接,还是使用StringBuilder,因为它更高效。可能还有的小伙伴会说,StringBuffer呢?下面我们看下手册说明:
该类(StringBuilder)被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
其实,StringBuilder和StringBuffer没有太大的差距,只是他们的“出生日期不同”,StringBuffer是JDK1.0出来的,而StringBuilder是JDK 1.5出来的,既然StringBuilder是StringBuffer的一个替换,相比官网肯定有做了些优化,官网也推荐我们使用StringBuilder,那我们只好恭敬不如从命了——使用StringBuilder。

原文地址:https://www.cnblogs.com/love-programming/p/12407348.html

时间: 2024-10-14 18:58:18

java-API之StringBuilder类型的相关文章

java安全沙箱(四)之安全管理器及Java API

java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 ??安全管理器及Java API?? 本篇博客主要介绍"类安全管理器及Java API"的基本原理,如需了解其它几类安全机制可以通过上面的博客链接进入查看. 简介 java安全沙箱的前三类保证了jvm所运行程序的完整性,使得jvm不会因为运行有漏洞或恶意的代码而导致出现不可预期的状态.而第四类沙箱模型是

1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环境是一个包含了不同的类和程序的单一进程.线程可以被称为轻量级进程.线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源. 2. 多线程编程的好处是什么? 在多线程程序中,多个线程被并发的执行以提高程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态. 3. 用户线程和守护线程有什么区别? 当我们在Java

笔记:MyBatis 使用 Java API配置

我们已经讨论了各种MyBatis配置元素,如envronments.typeAlias和typeHandlers,以及如何使用XML配置它们.即使你想使用基于JavaAPI的MyBatis配置,MyBatis的SqlSessionFactory接口除了使用基于XML的配置创建外也可以通过Java API 编程式地被创建.每个在XML中配置的元素,都可以编程式的创建.使用Java API创建SqlSessionFactory,代码如下: ? ? ????public?static?SqlSessi

spark2.x由浅入深深到底系列六之RDD java api详解三

学习任何spark知识点之前请先正确理解spark,可以参考:正确理解spark 本文详细介绍了spark key-value类型的rdd java api 一.key-value类型的RDD的创建方式 1.sparkContext.parallelizePairs JavaPairRDD<String, Integer> javaPairRDD =         sc.parallelizePairs(Arrays.asList(new Tuple2("test", 3

在Java API设计中,面向接口编程的思想,以及接口和工厂的关系

现在的java API的设计中,提倡面向接口的编程,即在API的设计中,参数的传递和返回建议使用接口,而不是具体的实现类,如一个方法的输入参数类型应该使用Map接口,而不是HashMap或Hashtable等具体的实现类.这样做的好处是,程序容易扩展.如果使用Map作为参数,用户可以使用任何实现Map接口的类作为参数,而不是仅仅限制使用HashMap或Hashtable作为参数,使程序的实现更加灵活. 接口(Java的Interface),只定义了一些抽象的方法(也可以定义一些常量,但不鼓励这么

Android学习八---OpenCV JAVA API

OpenCV java API的文档说明在OpenCV-2.4.10-android-sdk/sdk/java/javadoc/index.html的文件夹下. 想用java API的方式进行OpenCV4android 应用开发还是挺简单,首先就这些API先熟悉一下,然后对自己要开发的应用设计好流程,需要用到什么的数据结构进行存储,用到什么算法.然后对算法进行了解,输入参数是什么,输出参数是什么.有哪些fields和methods. 1.Packages:org.opencv.core Cor

MyBatis——Java API

Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDBC 相比, MyBatis 很大程度简化了你的代码而且保持简洁,很容易理解和维护.MyBatis 3 已经引入 了很多重要的改进来使得 SQL 映射更加优秀. 应用目录结构 在我们深入 Java API 之前,理解关于目录结构的最佳实践是很重要的.MyBatis 非常灵 活, 你可以用你自己的文件来

Blobstore Java API overview

Blobstore API允许你的应用程序使用(serve)叫做Blobs的数据对象.这种数据对象比Datastore服务所允许的对象的尺寸大得多.Blobs能有效地为大文件比如视频.图片提供服务,允许用户上传大数据文件.通过HTTP请求上传一个文件来创建Blobs.通常,你的应用程序通过向用户呈现一个表格(form)和一个文件上传区域(a file upload field)来实现.当这个表格被提交的时候,Blobstore会从文件的内容来创建一个Blob,并且返回一个指向blob的叫做blo

Apache Kafka系列(三) Java API使用

Apache Kafka系列(一) 起步 Apache Kafka系列(二) 命令行工具(CLI) Apache Kafka系列(三) Java API使用 摘要: Apache Kafka Java Client API 一.基本概念 Kafka集成了Producer/Consumer连接Broker的客户端工具,但是在消息处理方面,这两者主要用于服务端(Broker)的简单操作,如: 1.创建Topic 2.罗列出已存在的Topic 3.对已有Topic的Produce/Consume测试

Java API操作ZooKeeper

创建会话 1 package org.zln.zk; 2 3 import org.apache.zookeeper.WatchedEvent; 4 import org.apache.zookeeper.Watcher; 5 import org.apache.zookeeper.ZooKeeper; 6 7 import java.io.IOException; 8 9 /** 10 * Created by sherry on 16/8/27. 11 */ 12 public class