56-58_数组_StringBuilder和StringBuffer_常用方法_方法链的实现_JDK源码分析_常见面试题

来源:互联网 发布:三个数最大公约数算法 编辑:程序博客网 时间:2024/05/17 00:12

StringBuilder与StringBuffer

  • StringBuilder可变字符串,线程不太安全,但效率高,推荐使用。
  • StringBuffer可变字符串,线程安全,但效率低,不推荐使用。
  • String 是不可变字符串,根据实时情况使用,在循环当中不要使用,因为会产生好的没用的字符串。

StringBuffer和StringBuilder的方法完全一样。

String,StringBuilder要学会查看api的良好习惯,通过api学会使用常见的方法,自己利用案例来理解每个方法的具体含义。这样你会更深刻理解每个方法的使用。

StringBuilder与StringBuffer常用方法

构造函数:

StringBuilder()
public StringBuilder() {        super(16);//初始化默认为16字符}//super:AbstractStringBuilderAbstractStringBuilder(int capacity) {        value = new char[capacity];}

StringBuilder(int size)

public StringBuilder(int capacity) {        super(capacity);}

StringBuilder(String str)

public AbstractStringBuilder append(String str) {        if (str == null)            return appendNull();        int len = str.length();        ensureCapacityInternal(count + len);        str.getChars(0, len, value, count);        count += len;        return this;} public StringBuilder append(String str) {        super.append(str);        return this;}public StringBuilder(String str) {        super(str.length() + 16);        append(str);}

StringBuilder(CharSequence chars)

public StringBuilder(CharSequence seq) {        this(seq.length() + 16);        append(seq);}public AbstractStringBuilder append(CharSequence s) {        if (s == null)            return appendNull();        if (s instanceof String)            return this.append((String)s);        if (s instanceof AbstractStringBuilder)            return this.append((AbstractStringBuilder)s);        return this.append(s, 0, s.length());}

(1)、length()和capacity()

一个StringBuffer当前长度可通过length()方法得到,而整个可分配空间通过capacity()方法得到。

(2)、ensureCapacity()

设置缓冲区的大小:
void ensureCapacity(int capacity)

(3)、setLength()

设置缓冲区的长度
void setLength(int len)

(4)、charAt()和setCharAt()

同String

(5)、getChars()

同String

(6)、append()

可把任何类型数据的字符串表示连接到调用的StringBuffer对象的末尾。

int a=42;StringBuffer sb=new StringBuffer(40);String s=sb.append("a=").append(a).append("!").toString();

(7)、insert()

插入字符串

  • StringBuffer insert(int index,String str)
  • StringBuffer insert(int index,char ch)
  • StringBuffer insert(int index,Object obj)

index指定将字符串插入到StringBuffer对象中的位置的下标。

(8)、reverse()

颠倒StringBuffer对象中的字符

(9)、delete()和deleteCharAt()

删除字符

  • StringBuffer delete(int startIndex,int endIndex)
  • StringBuffer deleteCharAt(int loc)

(10)、replace()

替换

  • StringBuffer replace(int startIndex,int endIndex,String str)

(11)、substring()

截取子串 

  • String substring(int startIndex)
  • String substring(int startIndex,int endIndex)
public static void main(String[] args) {        StringBuilder sb = new StringBuilder("abcdefghijklmnopqrstuvwxyz");        sb.append(true).append("ABC");// append(参数)添加方法,返回值是this        System.out.println(sb);        sb.delete(3, 5);// 删除方法是[start end)这样的一个规律。        System.out.println(sb);        sb.replace(3, 5, "Hello");// 替换方法是从start 开始 end结束之间插入字符串。        System.out.println(sb);        System.out.println(sb.length());// 还有一些一看就明白的方法自己尝试一下。    }}

面试题的回答

StringBuilder 与StringBuffer的区别,StringBuilder与String的区别。

  1. StringBuilder效率高,线程不安全,StringBuffer效率低,线程安全。
  2. String是不可变字符串,StringBuilder是可变字符串。为什么有这样的差异,可以深入源码去解析,比如String类内的 priver final char value[] 等方法的原因。
  3. 如果是简单的声明一个字符串没有后续过多的操作,使用String,StringBuilder均可,若后续对字符穿做频繁的添加,删除操作,或者是在循环当中动态的改变字符穿的长度应该用StringBuilder。使用String会产生多余的字符串,占用内存空间。
阅读全文
0 0
原创粉丝点击