day05

15.StringBuilder和StringBuffer个人总结

15.1关于底层核心机制
15.1.1 关于线程安全
  • StringBuffer和StringBuilderd的append的方法是在AbstractStringBuilder中实现的,

  • StringBuffer的append方法加了synchronized。

  • StringBuffer是线程安全的但效率低,StringBuilder是线程不安全的但高效

  • 其底层是字节数组

    15.1.2 两者拥有相同的扩容机制 :

    ​ 无参构造初始容量为:16

    ​ 有参构造初始容量为:字符串参数的长度+16

有参和无参扩容方法都一样的。都是从当前容量开始扩容

15.1.3扩容的两种情况
    一次追加长度超过当前容量,则会按照 当前容量*2+2 扩容一次
    一次追加长度不仅超过初始容量,而且按照 当前容量*2+2 扩容一次也不够,其容量会直接扩容到与所添加的字符串长度相等的长度。之后再追加的话,还会按照 当前容量*2+2进行扩容
15.2 强调注意

!!!再者要注意,好多方法中按指定范围截取的子序列,范围基本都是取左不取右

15.3 其方法的简单调用

实现代码如下 :

public class StringBuilderTest {
    public static void main(String[] args) {
        //创建
        StringBuilder builder = new StringBuilder();

        //获得序列长度
        int i = builder.length();

        //返回当前容量
        System.out.println(builder.capacity());//默认初始长度为16

        //追加元素到末尾 append()
        builder.append("nuc."); 
        builder.append("edu.");
        System.out.println(builder); //nuc.edu.

        //移除此序列的子字符串中的字符 (左闭右开)!!!
        builder.delete(0,builder.length());
        System.out.println(builder); //   

        //链式增加元素
        builder.append("nuc").append(".").append("edu.");
        System.out.println(builder); //nuc.edu.

        //将给定的代码点参数以字符串形式附加到此延续的内容中
        builder.appendCodePoint(99); 
        builder.appendCodePoint(110);
        System.out.println(builder); //nuc.edu.cn

        // setCharAt(int index, char ch) --> 将给定索引处的字符设置为 ch
        builder.setCharAt(7,'!'); //注意是字符!不是所谓的字符串!!!
        System.out.println(builder); //nuc.edu!cn

        //insert(int offset, String str)  将 str 参数的字符串插入此序列中
        builder.insert(4,"north.");
        System.out.println(builder); //nuc.north.edu!cn

        //replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符 (左闭右开!!!)
        builder.replace(0,3,"NUC"); //实际替换的是[0,2]
        System.out.println(builder); //NUC.north.edu!cn


        //   返回一个新的 String
        //   String substring(int start)
        //   String substring(int start, int end)
        String substring1 = builder.substring(4);
        System.out.println(substring1); //north.edu!cn    

        String substring2 = builder.substring(4, 9);//!!!左闭右开
        System.out.println(substring2); //north    实际取[4,8]
    }
}

16.面向对象

16.1 面向对象与面向过程的异同
161.1相同点

面向过程和面向对象都是对软件分析、设计和开发的一种思想

16.2.2区别

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。即面向对象是以功能来划分问题,而不是步骤。

16.2. 面向对象的优点
16.2.1优点:

易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护

即将复杂的问题简单化,更符合人们思考问题的角度。且面向过程更贴合执行者的思维方式,而面向对象更贴合管理者的思维方式。

16.2.2 缺点:

性能比面向过程低

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值