zoukankan      html  css  js  c++  java
  • 剑指offer例题——二维数组中的查找

    //实现一个函数,将一个字符串的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
    public class Solution {
        public String replaceSpace(StringBuffer str) {
            String s = str.toString();
            char[] s_1 = s.toCharArray();
            StringBuffer out = new StringBuffer();
            for (int i = 0;i<s_1.length;i++){
                if (s_1[i] == ' ')
                    out.append("%20");
                else
                    out.append(s_1[i]);
            }
            return out.toString();
        }
    }

        因为自己还是一个菜菜,所以编代码的过程中参考了别人的思路,多谢大神,此外,还查阅了有关String,StringBuilder和StringBuffer三者的差别,转自高人的博客,自己又手打了一遍相关内容

    链接为https://www.cnblogs.com/su-feng/p/6659064.html

    自己的手打:

    Java中的StringStringBuilder,StringBuffer三者的区别

    1. 运行速度方面

    StringBuilder>StringBuffer>String

    String最慢的原因:String为字符串常量,而StringBuilderStringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

    例如:

    String str = “abc”;

    System.out.println(str);

    Str = str + “de”;

    System.out.println(str);

       若运行该段程序,会先输出abc”,然后又输出“abcde”,好像是str这个对象被修改了,其实,这只是假象,JVM对于这几行,是采取先创建一个String对象str,并赋值为“abc”,然后在第三行中,JVM又创建了一个新的对象也命名为str,然后再把原来的str值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)回收掉,所以,str实际上并木有被修改,即String对象一旦被创建后就是不可更改的。因为JavaString对象进行操作是一个不断创建新对象并将旧对象收回的过程,故执行过程很慢。

    StringBufferStringBuilder的对象是变量,对变量进行操作就是直接对该对象进行修改,而不进行创建和回收的操作,所以速度要比String快很多。

    有时我们对字符串进行赋值

    String str = “abc” + “de”;

    StringBuilder stringBuilder = new StringBuilder().append(“abc”).append(“de”);

    System.out.println(str);

    System.out.println(StringBuilder.toString());

    这样的输出结果都为abcde”,但是String的速度要比StringBuilder的速度快,这是应为第一行中的操作和String str = “abcde”;是等效的,所以会很快。

    2. 线程安全

    在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

    StringBuffer在字符串缓冲区被多个线程使用时,很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法没有关键字,所以不能保证线程安全。但是单线程时还是建议用速度比较快的StringBuilder

    总结

    String:适用于少量字符串操作情况

    StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

    StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况

  • 相关阅读:
    Java集合之ArrayList
    深入理解Java中的String
    Spring系列之AOP实现的两种方式
    设计模式之代理模式
    使用 Composer 为 ThinkPHP(3.2.3)框架添加和管理组件
    滚动页面, 顶部导航栏固定效果
    nginx同一iP多域名配置方法
    nginx 服务器重启命令,关闭
    CentOS Linux服务器安全设置
    CentOS7安装iptables防火墙
  • 原文地址:https://www.cnblogs.com/10081-AA/p/10289710.html
Copyright © 2011-2022 走看看