zoukankan      html  css  js  c++  java
  • leetcode日志(200803) 字符串相加及string相关类

    今天打开每日一题的推荐,是一道简单难度的题目,那就可以一试。

    哎呀呀,怎么看起来这么熟悉,这不是去年复试的时候写的题目吗,当时还是c++写的。

    简单回忆一下,就是string当成char数组,然后从最后一位依次转int相加,超10就向上一位+1。

    注意一下如果最高位有进位需要在前面补个1,别的就没啥了。

     然后再把结果输出出来就可以了。

    思路明确,主要问题是解决字符串和字符数组的操作函数

    不如直接看一下优秀的题解:

     额,说实话第一眼有点懵B,竟然可以这样!倒着运算通过循环进行计算,同时append对结果保存至一个全新字符串中,进位使用carry计算,对本位来说使用对10的余数,对于高位来说使用对10的商。结果最后再使用reverse函数进行反向输出,整体简洁规范,实在是秒!!!

    这就是程序中的艺术吗,果然程序的成长没有极限的,除非突破人类!!!

    除了学习这个思想之外,在此总结一下string,stringbuffer,stringBulider的相关知识(来自网络搜索资料):

    1.String

      他是一个不可类,在此类的一个对象被声明之后,此类则不会被修改,如果有新的赋值变化时,会在堆区重新声明新的空间,并将引用指向新的空间,旧的空间如果没有再次被引用则会垃圾回收。

    原文很生动,在此引用保存一下:

    String a = "123";
    a = "456";
    // 打印出来的a为456
    System.out.println(a)

    对于 a对象来说,首先赋值123,再次赋值456时,并不会更改原有值,而是声明全新的对象,a重新指向新的对象,而原有“123”对象则会等待回收。

    2.StringBuffer

     StingBuffer是一个可变的字符串类,在被创建之后,提供append()、insert()、reverse()、setCharAt()、setLength()等方法对字符串数据进行更改,然后通过tostring方法将此对象转化为string对象。

    StringBuffer b = new StringBuffer("123");
    b.append("456");
    // b打印结果为:123456
    System.out.println(b);

    这里也引用了原文的例子,下面是b对象的内存空间,可以看到b对象并没有新空间变化,而是原有的空间上进行更改

    3.StringBuilder

     StringBuilder与StringBuffer功能相似,都可以在创建后进行修改,但是有一个特殊的地方就是:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以性能略高。

    对于StringBuffer实现线程安全需要添加synchronized锁

    而stringBuilder则不用添加

    因此stringBuilder是线程安全的。

    Java9的改进

      Java9改进了字符串(包括String、StringBuffer、StringBuilder)的实现。在Java9以前字符串采用char[]数组来保存字符,因此字符串的每个字符占2字节;而Java9的字符串采用byte[]数组再加一个encoding-flag字段来保存字符,因此字符串的每个字符只占1字节。所以Java9的字符串更加节省空间,字符串的功能方法也没有受到影响。

    总结的非常简洁,站在巨人肩膀上才能不断进步,继续加油。

  • 相关阅读:
    [ACM_模拟] ZJUT 1155 爱乐大街的门牌号 (规律 长为n的含k个逆序数的最小字典序)
    [ACM_搜索] ZOJ 1103 || POJ 2415 Hike on a Graph (带条件移动3盘子到同一位置的最少步数 广搜)
    [ACM_动态规划] POJ 1050 To the Max ( 动态规划 二维 最大连续和 最大子矩阵)
    [ACM_搜索] POJ 1096 Space Station Shielding (搜索 + 洪泛算法Flood_Fill)
    [JAVA] java_实例 获得系统字体
    [JAVA] java仿windows 字体设置选项卡
    [JAVA] 一个可以编辑、编译、运行Java简单文件的记事本java实现
    [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)
    JS的数组相关知识
    JS的join方法
  • 原文地址:https://www.cnblogs.com/PPGwo/p/13428005.html
Copyright © 2011-2022 走看看