1 StringBuffer
1.1 StringBuffer的概述
StringBuffer类概述:线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
StringBuffer和String的区别:StringBuffer长度和内容可变,String不可变。使用StringBuffer做字符串的拼接不会浪费太多资源
1.2 StringBuffer类的构造方法
- public StringBuffer():
构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符
- public StringBuffer(int capacity):
构造一个不带字符,但具有指定初始容量的字符串缓冲区
- public StringBuffer(String str):
构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。该字符串的初始容量为 16加上字符串参数的长度
例:
StringBuffer sb1 = new StringBuffer();
System.out.println(sb1.capacity());//16
System.out.println(sb1.length());//0
StringBuffer sb2 = new StringBuffer("hello");
System.out.println(sb2.capacity());//21
System.out.println(sb2.length());//5
1.3 StringBuffer的添加功能
- public StringBuffer append(String str):
将指定的字符串追加到此字符序列
- public StringBuffer insert(int offset,String str):
将字符串插入此字符序列中
1.4 StringBuffer的删除功能
- public StringBuffer deleteCharAt(int index):
移除此序列指定位置的 char。此序列将缩短一个 char
- public StringBuffer delete(int start,int end):
移除此序列的子字符串中的字符。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符,如果不存在这种字符,则一直到序列尾部。如果 start 等于 end,则不发生任何更改
1.5 StringBuffer的替换功能
public StringBuffer replace(int start,int end,String str):
使用给定 String 中的字符替换此序列的子字符串中的字符
1.6 StringBuffer的反转功能
public StringBuffer reverse():将此字符序列用其反转形式取代
1.7 StringBuffer的截取功能
- public String substring(int start)
返回一个新的 String,它包含此字符序列当前所包含的字符子序列
- public String substring(int start,int end)
返回一个新的 String,它包含此序列当前所包含的字符子序列。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符
1.8 StringBuffer和String的相互转换
String和StringBuffer的相互转换
String →StringBuffer
Stirng s;
StringBuffer sb = new StringBuffer (s);
StringBuffer sb = new StringBuffer (); sb.append(s);
StringBuffer →String
String s = new String(sb);
String s = sb.toString();
1.9 StringBuffer的两个面试题
- 第1题:String,StringBuffer,StringBuilder的区别
1.String是内容不可变的,而StringBuffer和StringBuilder都是内容可变的
2.StringBuffer是同步的,数据安全,效率低
StringBuilder是不同步的,数据不安全,效率高
- 第2题:StringBuffer和数组的区别
StringBuffer和数组都是可以装数据的容器
StringBuffer可以存储任意类型的数据,但最终是一个字符串数据
数组只能存储同一种数据类型的数据
1.10 String和StringBuffer分别作为参数传递
public class Practice
{
public static void main(String[] args)
{
String s1 = "hello";
String s2 = "world";
System.out.println(s1 + "---" + s2);
change(s1, s2);
System.out.println(s1 + "---" + s2);
StringBuffer sb1 = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("world");
System.out.println(sb1 + "---" + sb2);
change(sb1, sb2);
System.out.println(sb1 + "---" + sb2);
}
public static void change(StringBuffer sb1, StringBuffer sb2)
{
sb1 = sb2;
sb2.append(sb1);
}
public static void change(String s1, String s2)
{
s1 = s2;
s2 = s1 + s2;
}
}
结果:
hello---world
hello---world
hello---world
hello---worldworld
2 Arrays工具类
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
成员方法:
- public static String toString(int[] a):
返回指定数组内容的字符串表示形式。
- public static void sort(int[] a):
对指定的 int 型数组按数字升序进行排序。
- public static int binarySearch(int[] a,int key):
使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
例:
//定义一个数组
int[] arr = {23,25,65,85,34,82};
//数组转字符串
System.out.println(Arrays.toString(arr));
//数组排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//二分查找
System.out.println(Arrays.binarySearch(arr, 65));
运行结果:
[23, 25, 65, 85, 34, 82]
[23, 25, 34, 65, 82, 85]
3
binarySearch方法如果要查找的数在数组中存在,则返回的是该数在数组中的位置
如果不存在则返回的是该数在数组中插入的位置,该数是一个负数,表示要查找的数在数组中不存在
插入位置的计算方法为:例如返回的是-7,则在数组中应该插入的位置是7-1=6