一、StringBuffer类
1.StringBuffer类的概述
存储字符的容器,长度可变,是线程安全的可变字符序列
2.StringBuffer类的构造方法
//public StringBuffer():无参构造方法
//构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
//超过了默认容量,可以自动扩充
StringBuffer sb = new StringBuffer();
int capacity = sb.capacity(); //获取缓冲区的容量
int length = sb.length(); //获取长度 实际你往容器中存了多少个字符
3.StringBuffer的添加功能
StringBuffer sb = new StringBuffer();
sb.append("abc"); //往容器中添加内容,返回的还是原来那个容器
sb.insert(2,"皮皮虾,我们走"); //在指定位置,插入数据
System.out.println(sb);
4.StringBuffer的删除功能
StringBuffer sb = new StringBuffer();
sb.append("红尘来呀来去呀去都是一场梦");
sb.deleteCharAt(0);//删除指定位置的字符,并返回本身
int index = sb.indexOf("都");
sb.delete(index,sb.length());//删除从指定位置开始指定位置结束的内容,并返回本身
System.out.println(sb);
5.StringBuffer的替换和反转功能
StringBuffer sb = new StringBuffer();
sb.append("红尘来呀来去呀去都是一场梦");
//根据起始索引和终止索引替换容器中的一段内容,返回的还是容器本身
sb.replace(0, sb.lastIndexOf("去")+1, "abc");
System.out.println(sb);
sb.reverse(); //反转容器中的数据,返回的还是原来的容器
System.out.println(sb.toString());
6.StringBuffer的截取功能
StringBuffer sb = new StringBuffer();
sb.append("红尘来呀来去呀去都是一场梦");
//根据索引截取容器中的数据,返回的是一个截取到的新的字符串
String substring = sb.substring(2);
String substring1 = sb.substring(2, 5); //含头不含尾
System.out.println(sb);
System.out.println(substring);
System.out.println(substring1);
7.StringBuffer和String的相互转换
//String 他是一个长度固定的字符序列,一旦定义就不能被改变
// StringBuffer 他是换一个长度可变的字符序列,是一个容器,可以往里面不断的追加数据
//String -转换成- StringBuffer
StringBuffer sb = new StringBuffer("abc");//通过构造方法
sb.append(100);//通过append()方法
//StringBuffer -转换成- String
System.out.println(sb.toString());//通过toString()方法
System.out.println(sb.substring(2));//使用substring方法
8.案例演示
- 把数组转成字符串
//需求:把数组中的数据按照指定个格式拼接成一个字符串
//举例:
//int[] arr = {1, 2, 3};
//输出结果:
//"[1, 2, 3]"
//用StringBuffer的功能实现
public class Mytest {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
StringBuffer sb = new StringBuffer("[");
for (int i = 0; i < arr.length; i++) {
if(i==arr.length-1){
sb.append(arr[i]).append("]");
}else{
sb.append(arr[i]).append(",");
}
}
String s = sb.toString();
System.out.println(s);
}
}
- 字符串反转
//案例演示
//需求:把字符串反转
//用StringBuffer的功能实现
public class Mytest {
public static void main(String[] args) {
String abc = new StringBuffer("abc").reverse().toString();
System.out.println(abc);
}
}
二、StringBuffer类与StringBuilder类的区别
- StringBuffer 字符串缓冲区 线程安全的 效率低
- StringBuilder 字符串缓冲区 线程不安全 效率高
- 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。
该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
三、String和StringBuffer分别作为参数传递
String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递。
public static void main(String[] args) {
//基本类型作为参数传递,形参的改变,不影响实参
//引用类型作为参数传递,形参的改变,会影响实参
//值传递,引用传递
//String 类型作为参数传递,跟基本类型一样
String str = "abc";
setString(str);
System.out.println(str);
StringBuffer sb = new StringBuffer("你好世界");
setStringBuffer(sb);
System.out.println(sb.toString());
}
private static void setStringBuffer(StringBuffer sb) {
sb.append("爱生活,爱Java").reverse();
}
private static void setString(String str) {
str = str + "dddd";
System.out.println(str);
}
四、Arrays类
1.Arrays类概述
针对数组进行操作的工具类。
提供了排序,查找等功能。
2.成员方法
public static String toString(int[] a)
public static void sort(int[] a)
public static int binarySearch(int[] a,int key)
public static void main(String[] args) {
// Arrays
//此类包含用来操作数组(比如排序和搜索)的各种方法。
//sort()排序
int[] arr={1,0,4,6,7,8,100};
Arrays.sort(arr);
//toString()把数组给你转成一个漂亮的字符串
System.out.println(Arrays.toString(arr));
int[] arr1={10,20,30,40,60,60,70,80,90,100};
//binarySearch()二分查找的前提条件:元素必须有序
int i = Arrays.binarySearch(arr, 100);
System.out.println(i);
}
3.二分查找
public static void main(String[] args) {
int[] arr = {10,20, 30, 40, 60, 60, 70, 80, 90, 100};
//二分查找
int index=findIndex(arr,100);
System.out.println("索引是"+index);
}
private static int findIndex(int[] arr,int ele) {
//定义三个变量
int minIndex=0;
int maxIndex=arr.length-1;
int centerIndex=(minIndex+maxIndex)/2;
while (minIndex<=maxIndex){
if (ele == arr[centerIndex]) {
return centerIndex;
} else if (ele > arr[centerIndex]) {
minIndex = centerIndex + 1;
} else if (ele < arr[centerIndex]) {
maxIndex = centerIndex - 1;
}
//重新计算中间索引
centerIndex = (minIndex + maxIndex) / 2;
}
return -1;
}