Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后,我们发现该类功能甚是强大.查看过API的小伙伴应该知道字符串缓冲区支持可变的字符串,说你是字符串缓冲区呢?接下来我们来研究一下字符串缓冲区. String在存储数据时,过于浪费内存,因此诞生了StringBuffer类,它是一个类似于 String 的字符串缓冲区,但不能修改.我们可以通过下图看出…
StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 关于String的讲解请看Java基础(三) String深度解析 首先看下面的例子 public static void main(String[] args) { String str0 = "hel,lo,wor,l,d"; long start = System.currentTimeMillis(); for (in…
前面在讲解String时提到了final关键字,本文将对final关键字进行解析. static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final关键字及其用法. final从总体上来说是"不可变的",可用于修改类.方法.变量. 一. final类 final修饰的类,该类不能被继承.当你确认一个类永远不会被继承或不想被继承,那么就可以用final修饰. 同样,对于接口(…
String  字符串常量存储在常量区,每次追加操作会创建新的对象: StringBuffer  字符串变量  线程安全 在堆上创建,每次追加操作在原对象上进行操作:  速度 StringBuffer > String StringBuilder 字符串变量   线程不安全,速度 StringBuilder >  StringBuffer String http://blog.csdn.net/rmn190/article/details/1492013 简要的说, String 类型和 St…
String       字符串常量   不可变  使用字符串拼接时是不同的2个空间 StringBuffer  字符串变量   可变   线程安全  字符串拼接直接在字符串后追加 StringBuilder 字符串变量   可变   非线程安全  字符串拼接直接在字符串后追加 1.StringBuilder执行效率高于StringBuffer高于String. 2.String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,        StringBuffer和Stri…
Java 中的 StringBuilder 类的常用方法 重要的事情说三遍: 在需要频繁对字符串进行修改操作时使用 StringBuilder 的效率比 String 要高 在需要频繁对字符串进行修改操作时使用 StringBuilder 的效率比 String 要高 在需要频繁对字符串进行修改操作时使用 StringBuilder 的效率比 String 要高 StringBuilder 类提供了很多方法来操作字符串: 例如:在下面的示例代码中,创建了 StringBuilder 对象,用来存…
StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 首先看下面的例子 public static void main(String[] args) { String str0 = "hel,lo,wor,l,d"; long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++){ str0…
本节讲述2个字符串容器的区别 StringBuffer和StringBuilder区别: 1.相同点 两者都是容器(可变的字符序列),都可以对字符串进行基本的“增删改查”操作. 2.不同点 StringBuffer:JDK1.0出现,线程同步,操作比较耗时,但是安全: StringBuilder:JDK1.5出现,线程不同步,由于它不执行同步,所以速度较StringBuffer更快:不是安全的.…
一.String类概述 1.String对象一旦创建就不能改变. 2.字符串常量池. 字符串常量池的特点:池中有则直接使用,池中没有则创建新的字符串常量. 例1: “==”  比较两个对象是否引用同一实例 public class StringDemo { public static void main(String args[]) { StringDemo1(); } public static void StringDemo1() { String str1="abcd"; Str…
在执行数据库SQL语句时,我们先要进行数据连接:而每次创建新的数据库的连接要消耗大量的资源,这样,大家就想出了数据库连接池技术.它的原理是,在运行过程中,同时打开着一定数量的数据库连接,形成数据连接池,当需要用到数据连接时,就从中取出一个连接,完成某些SQL操作后,系统自动回收,以供其它用户(或进程)调用. 我们知道,java标准的java.sql.Connection表示一个数据连接.我们封装了这个类,形成自己的数据库连接池.为了说明方便,这里用实际的类来显示: DBConnectionPoo…
思维导图svg: https://note.youdao.com/ynoteshare1/index.html?id=eb05fdceddd07759b8b82c5b9094021a&type=note 在多线程使用共享资源的时候, 我们可以使用synchronized来锁定共享资源,使得同一时刻,只有一个线程可以访问和修改它,修改完毕后,其他线程才可以使用.这种方式叫做互斥锁. 当一个共享数据被当前正在访问到线程添加了互斥锁之后,在同一时刻,其他线程只能等待,直到当前线程释放该锁. synch…
哈希表(hash table) 也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,本文会对java集合框架中HashMap的实现原理进行讲解,并对JDK7的HashMap源码进行分析. 一.什么是哈希表 在讨论哈希表之前,我们先大概了解下其他数据结构在新增,查找等基础操作执行性能 数组:采用一段连续的存储单元来存储数据.对于指定下标的查找,时间复杂度为O(1):通过给定值进行查找,需要遍历数组,逐一比对给定关键…
在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWarnings这样的字符,这些就是注解Annotation.注解最早在jdk5中被引入,现在已经成为java平台很重要的一部分了,很多的框架程序中也喜欢使用注解,如Spring.Mybatis等. 那么,什么是注解呢?注解就是元数据,一种描述数据的数据,通俗一点就是为程序的元素(类.方法.成员变量)加上更直观的说明,这些说明信息是与程序的业务逻辑无关的.但是,我们可以通过java的反射机制来获取An…
Stream简化元素计算: 一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心方法: Stream:核心接口,声明了流操作的核心方法,其他接口为指定类型的适配: 基础案例:通过指定元素的值,返回一个序列流,元素的内容是字符串,并转换为Long类型,最终计算求和结果并返回: System.out.println("sum1="+IntStr…
StringBuilder sb = new StringBulder("kikikiki"); sb.apend("123")    //追加 输出kikikiki123 sb.insert (int 2,String asd) //插入字符串 kiasdkikiki: sb.delete(int start,int end) //删除字符串: sb.replace(int start,int end,String str) // 替换字符串: sb.revers…
public class Copy3 { public static void main(String[] args) { //构造实例化 StringBuffer strbu = new StringBuffer("hello world\t"); char[] a = {'l','o','y','o','u'}; //调用方法 System.out.println(1+"\t"+strbu.append(true)); //append(boolean b);…
1 是什么 是为了解决facebook系统中各系统间大数据量的传输通信,以及系统之间语言环境不同需要跨平台的问题. 是一种实现RPC的软件框架,自定义IDL(Interface description language)接口描述语言 2 为什么用 当跨语言调用时,使用http是个比较好的访问协议,但是如果消费端不能使用http,而是以操作本地的api的方式来使用服务,那我们需要使用thrift,客户端和服务端之间传输协议分为文本和二进制,一般使用二进制类型传输. 3 框架流程 3.1 编写idl…
在说之前先普及一下线程是什么? 线程:说白了就是一个任务片段 进程:是一个具有独立功能的程序关于某个数据集合的一次执行活动.一个进程有一个或者多个线程 线程与进程的本质差别就是有么有数据共享空间.线程之间能够共享数据.进程不能够 以下进入主题:线程间的同步 因为如今业务流程添加.业务节点也添加.使用业务的人员也同一时候添加.这个时候就不可避免的出现并发问题,多个线程同一时候訪问操作某一个数据单元 我们以银行转账为例说明,以下先上代码: 建立一个银行的类,里面主要包含三个方法,一个是转账,一个是得…
注:以下源码均为JDK8的源码 一. 核心属性 基本属性如下: 核心的属性其实是红框中的两个: //从注释也容易看出,一个是集合元素,一个是集合长度(注意是逻辑长度,即元素的个数,而非数组长度) 其中:transient指明序列化时请忽略.  二.构造器 一共有3个构造器: 1.构造指定容量的ArrayList 2.默认构造器 //可以看到,默认初始容量为10(基本属性中的DEFAULT_CAPACITY) 而 DEFAULTCAPACITY_EMPTY_ELEMENTDATA是一个空数组,所有…
原文链接: http://www.aoaoyi.com/archives/956.html 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据 的读取和写入.由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就 存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU 执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来 进行,会大大降低指令执行的速度.因此在CPU里面就有了高速缓存.当程序在运…
在分析HashMap之前,先看下图,理解一下HashMap的结构 我手画了一个图,简单描述一下HashMap的结构,数组+链表构成一个HashMap,当我们调用put方法的时候增加一个新的 key-value 的时候,HashMap会通过key的hash值和当前node数据的长度计算出来一个index值,然后在把 hash,key,value 创建一个Node对象,根据index存入Node[]数组中,当计算出来的index上已经存在了Node对象的话.就把新值存在 Node[index].ne…
知识准备HashMap 我们平时用LinkedHashMap的时候,都会写下面这段 LinkedHashMap<String, Object> map = new LinkedHashMap<>(); map.put("student", "333"); map.put("goods", "222"); map.put("product", "222"); 然后我…
Java基础之String.StringBuffer.StringBuilder浅析 一.前言: 位于java.lang包下的String.StringBuilder.StringBuffer一般都是用来操作字符串的,这三个类都被final关键字修饰,不能被继承 相关的API我们可以在这里查看:https://docs.oracle.com/javase/8/docs/api/index.html 首先说明: String:字符串常量 StringBuffer:字符串变量(线程安全的) Stri…
接上文:Java基础——数组应用之字符串String类 一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类. 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入.删除等操作,使用StringBuffer要更加适合一些. 在StringBuffer类中存在很多和String类一样的方…
String类  (1)字符串:字符串是常量:它们的值在创建之后不能更改,存储在堆中.          如果字符串多次赋值,其实是每次重新赋值的时候程序都先在内存中寻找已开辟的空间是否存在该值;如果找不到,再开辟新的空间存储该对象 (2)构造方法:    A:String s = new String(); //空字符序列    B:String s = new String(char[] chs); //分配一个新的 String,使其表示字符数组参数中当前包含的字符序列.    C:Str…
java基础解析系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 我的博客目录 这是我的博客目录,欢迎阅读 String ==问题 String s6=new String("jiajun"); String s1="jiajun"; String s2="jiajun"; Syste…
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: String text = "a"; text = "b"; String不是不可变的么?为什么可以这样用?因为text是字符串"a"的引用,即引用是可以变化的,跟对象实例的属性变化没有关系.(这里创建的是两个String对象) String设计成不可…
一.Java Number & Math 类: 1.Number类: 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等.然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形.为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类.所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类 Number 的子类. 这种由编译器特别支持的包装称为装箱,所以当内置数据…
本文主要讲解String.StringBuilder.StringBuffer区别和应用场景 本文以jdk1.8为例 1 String 操作过程:每次赋值时新建一个String对象. 2 StringBuilder 所在路径:rt.jar  java.lang 实现抽象类AbstractStringBuilder 操作过程:字符串变量追加 3 StringBuffer线程安全 实现抽象类AbstractStringBuilder 实现append和toString方法时,使用关键字synchro…
1.StringBuffer类的概述 * A:StringBuffer类概述 * 通过JDK提供的API,查看StringBuffer类的说明 * 1.线程安全的可变字符序列. * 2.可将字符串缓冲区安全地用于多个线程. * 3.StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据.每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中.append 方法始终将这些字符添加到缓冲区的末端:而 i…