当前位置: 首页 > news >正文

动漫网站源码免费长沙做网站的包吃包住4000

动漫网站源码免费,长沙做网站的包吃包住4000,手机网站页面模板,徐州市建筑工程交易网目录 一.为什么要使用StringBuilder和StringBuffer 字符串的不可变性 性能损耗 二.StringBuilder和StringBuffer StringBuffer源码讲解 使用方式 三.常用方法总结 示例#xff1a; 四.StringBuilder和StringBuffer的区别 一.为什么要使用StringBuilder和StringBuffe… 目录 一.为什么要使用StringBuilder和StringBuffer 字符串的不可变性 性能损耗 二.StringBuilder和StringBuffer StringBuffer源码讲解 使用方式 三.常用方法总结 示例  四.StringBuilder和StringBuffer的区别 一.为什么要使用StringBuilder和StringBuffer 在引入StringBuilder和StringBuffer之前我们可以回顾一下之前我们对于字符串的拼接操作大多都是如下直接进行拼接 public static void main(String[] args) {String s hello;s world;System.out.println(s); // 输出hello world} 这样的操作固然是没有问题的但是如果要说到效率的话这样的代码效率就非常的低下了为什么低下呢说到这里我们就要提到字符串的相关性质了。 字符串的不可变性 String类在设计的时候就是不可改变的我们可以在JDK1.8的源码中看见如下的注释 因此我们平常使用的对于String字符串操作的方法都是新建了一个对象来进行操作想验证这个结论也很简单我们随便选择一个方法我们使用 “ ” 相当于比较的是俩边变量的地址的哈希值我们将一个字符串和对它进行大写转换后的字符串进行对比 public static void main(String[] args) {String s hello;//s.toUpperCase(Locale.of(s));System.out.println( s s.toUpperCase(Locale.of(s)));} 输出结果 性能损耗 我们再回顾刚才对于字符串的拼接操作每一次拼接都要新建一个对象的 当拼接次数非常多的时候会造成非常严重的性能问题我们当然也可以验证这个性能问题使用 currentTimeMillis 方法可以直接拿到当前时刻系统的时间戳我们可以通过一个循环来展示一下使用传统方式拼接字符串的方式会有怎么样的一个性能损耗 public static void main(String[] args) {long start System.currentTimeMillis();String s ;for(int i 0; i 10000; i){s i;}long end System.currentTimeMillis();System.out.println(end - start);} 输出结果 当然这还只是10000次循环就造成了82毫秒的运行时间实际工程中所需的循环次数往往是不可估摸的因此使用这种方式进行拼接往往是不能完成我们的性能要求的 二.StringBuilder和StringBuffer 为了解决上述的问题我们就可以使用StringBuilder和StringBuffer来进行字符串的拼接等操作我们可以打开API来查看什么是StringBuilder和StringBuffer StringBuilder StringBuffer StringBuffer源码讲解 在一般使用的时候他们的功能大致相同这里笔者进行讲解就只选取其中一种整体的包含的方法使用的技巧大多都是一样的因此不用担心知识覆盖面不全面笔者这里就以 StringBuffer 来举例我们可以在IDEA中打开 StringBuffer 的源码我们可以发现它也是被 final 修饰继承了父类 AbstractStringBuilder 并且实现了部分接口 父类 AbstractStringBuilder 中一共俩个成员变量 我们可以看见它的构造方法包含了不同初始化对应的操作 使用方式 通过源码中的的super关键字结合和上述父类中的成员变量我们可以得到以下结论我们默认新建一个 StringBuffer 的时候实际上是新建了一个16字节的数组我们也可以使用其他的俩个构造方法在传参的时候直接传入大小参数或者直接传入一个字符串 我们总结三种常用的初始化方式如下 不传参数默认16字节大小的数组传入参数直接申明大小传入字符串 StringBuffer stringBuffer1 new StringBuffer();StringBuffer stringBuffer3 new StringBuffer(20);StringBuffer stringBuffer2 new StringBuffer(hello); 三.常用方法总结 我们的StringBuilder和StringBuffer最大的特征就是他们内部是可变的我们通过这俩个类去操作字符串的时候可以不用新建一个对象因此我们在进行字符串的拼接的时候往往都是用的这俩个类进行操作这极大程度上有利于我们提高程运行的效率 我们再谈文章开始说的那个例子我们使用StringBuffer中的 append 方法可以直接拼接字符我们分别使用传统的拼接字符和这里的StringBuffer来对比拼接字符所需要的时间 public static void main(String[] args) {long start System.currentTimeMillis();String s ;for(int i 0; i 10000; i){s i;}long end System.currentTimeMillis();System.out.println(end - start);System.out.println(分割行);start System.currentTimeMillis();StringBuffer sbf new StringBuffer();for(int i 0; i 10000; i){sbf.append(i);}end System.currentTimeMillis();System.out.println(end - start);} 输出结果 我们可以直观的发现使用 StringBuffer 来拼接字符比直接拼接的效率提高了几十倍而如果加多循环次数的话这个倍数还能继续再增加将原本程序的效率提高几百倍不是梦 除了上述的appen方法我们将常用的方法总结如下 方法说明 StringBuff append(String str) 在尾部追加相当于 String 的 可以追加 boolean 、 char 、 char[] 、 double、 float 、 int 、 long 、 Object 、 String 、 StringBuff 的变量 char charAt(int index) 获取 index 位置的字符 int length() 获取字符串的长度 int capacity() 获取底层保存字符串空间总的大小 void ensureCapacity(int mininmumCapacity) 扩容 void setCharAt(int index, char ch) 将 index 位置的字符设置为 ch int indexOf(String str) 返回 str 第一次出现的位置 int indexOf(String str, int fromIndex) 从 fromIndex 位置开始查找 str 第一次出现的位置 int lastIndexOf(String str) 返回最后一次出现 str 的位置 int lastIndexOf(String str, int fromIndex) 从 fromIndex 位置开始找 str 最后一次出现的位置 StringBuff insert(int offset, String str) 在 offset 位置插入八种基类类型 String 类型 Object 类型数据 StringBuffer deleteCharAt(int index) 删除 index 位置字符 StringBuffer delete(int start, int end) 删除 [start, end) 区间内的字符 StringBuffer replace(int start, int end, String str) 将 [start, end) 位置的字符替换为 str String substring(int start) 从 start 开始一直到末尾的字符以 String 的方式返回 String substring(int start int end) 将 [start, end) 范围内的字符以 String 的方式返回 StringBuffer reverse() 反转字符串 String toString() 将所有字符按照 String 的方式返回 示例  public static void main(String[] args) {StringBuilder sb1 new StringBuilder(hello);StringBuilder sb2 sb1;// 追加即尾插--字符、字符串、整形数字sb1.append( ); // hellosb1.append(world); // hello worldsb1.append(123); // hello world123System.out.println(sb1); // hello world123System.out.println(sb1 sb2); // trueSystem.out.println(sb1.charAt(0)); // 获取0号位上的字符 hSystem.out.println(sb1.length()); // 获取字符串的有效长度14System.out.println(sb1.capacity()); // 获取底层数组的总大小sb1.setCharAt(0, H); // 设置任意位置的字符 Hello world123sb1.insert(0, Hello world!!!); // Hello world!!!Hello world123System.out.println(sb1);System.out.println(sb1.indexOf(Hello)); // 获取Hello第一次出现的位置System.out.println(sb1.lastIndexOf(hello)); // 获取hello最后一次出现的位置sb1.deleteCharAt(0); // 删除首字符sb1.delete(0, 5); // 删除[0, 5)范围内的字符String str sb1.substring(0, 5); // 截取[0, 5)区间中的字符以String的方式返回System.out.println(str);sb1.reverse(); // 字符串逆转str sb1.toString(); // 将StringBuffer以String的方式返回System.out.println(str);} 从上述例子可以看出String和StringBuilder最大的区别在于String的内容无法修改而StringBuilder的内容可以修改因此频繁修改字符串的情况考虑使用StringBuilder 注意String和StringBuilder类不能直接转换。如果要想互相转换可以采用如下原则 String变为StringBuilder: 利用StringBuilder的构造方法或append()方法StringBuilder变为String: 调用toString()方法 四.StringBuilder和StringBuffer的区别 我们可以打开StringBuffer的源码我们观察到几乎每一个StringBuffer的前面都有一个synchronized来修饰StringBuffer这里的synchronized其实就可以理解为一个锁被synchronized修饰的方法不允许同时被多个对象在同一时刻调用这样的设立是为了多线程的程序的安全性。 举个通俗的例子现在有小王小李小红三个人想上厕所但是厕所只有一个小王先去上厕所那么小李或者小红就只能等小王用完厕所出来了后才能去上厕所 而我们的StringBuffer就是类似这样设置的当一个对象调用被synchronized修饰的方法的时候这个方法就会被上锁其他对象不能使用只有当前这个对象使用完这个方法之后也就是解锁之后其他对象才能访问 当我们打开StringBuilder的源码会发现我们的StringBuilder并没有这样的设置操作 总结 也就是说StringBuffer是为了多线程的安全但是频繁的上锁解锁会降低代码的运行效率而StringBuilder虽然没有安全性的考虑但是它不用开锁解锁所以运行效率更高我们在编程中如果需要安全性就使用StringBuffer如果是为了高效率就使用StringBuilder 本次的分享就到此为止了希望我的分享能给您带来帮助也欢迎大家三连支持你们的点赞就是博主更新最大的动力如有不同意见欢迎评论区积极讨论交流让我们一起学习进步有相关问题也可以私信博主评论区和私信都会认真查看的我们下次再见
http://www.zqtcl.cn/news/564152/

相关文章:

  • 做宠物网站的工作室做网站租服务器
  • 2017做那个网站致富网站换源码如何保留以前的文章
  • php网站开发实例教程书wordpress博客页面显示文章在哪
  • 地方o2o同城网站源码微信app开发价格表
  • 花木公司网站源码双语外贸网站源码
  • 什么公司做网站会提供源代码创业做招商加盟类网站赚钱
  • 东莞网站建设排名基因数据库网站开发价格
  • 天河区营销型网站建设科技自立自强
  • 网站域名账号江苏百度推广代理商
  • 专题网站建站对网站分析
  • 外贸出口网站建设如何搭建自己的网站服务器
  • 云南省建设厅网站职称评审房地产推广方案和推广思路
  • 湘潭建设路街道网站app的设计与开发
  • 《网站开发实践》 实训报告广告策划书案例完整版
  • 一级 爰做片免费网站做中学学中做网站
  • 网站排名如何提升网络营销的有哪些特点
  • 巨腾外贸网站建设个人主页网站模板免费
  • 有哪些网站免费做推广淄博网站电子商城平台建设
  • 网站建设的技术支持论文做网站买什么品牌笔记本好
  • 凡科网站后台在哪里.工程与建设
  • 静态网站源文件下载建设手机网站价格
  • 苏州做网站优化的网站开发邮件
  • 做网站怎么搭建环境阿里云大学 网站建设
  • 网站改版业务嵌入式培训推荐
  • 腾讯云 怎样建设网站网站开发 报价
  • 网络科技公司门户网站免费人脉推广官方软件
  • 建和做网站网络营销推广可以理解为
  • 太原市网站建设网站人防工程做资料的网站
  • 怎么做免费推广网站做网站第一部
  • 橙色网站后台模板WordPress的SEO插件安装失败