StringBuffer
如果我们创建一个字符串,并且每次要对这个字符串进行操作后,都不会在原字符串上进行操作,而是会构建一个新的字符串对象,这样既浪费时间,又会浪费空间。这时我们引入了StringBuffer类。
概述:
StringBuffer就相当于一个用来存储字符串的容器,长度可以改变,本质是一个线程安全的可变字符序列,类似于String的字符串缓冲区,不能被修改,但可以调用特有的方法改变它的长度和内容。有自己的构造方法。
构造方法:
- public StringBuffer()
无参构造方法,在创建对象时,默认会创建一个初始容量为16个字符的不带字符的字符串缓冲区 - public StringBuffer(int capacity)
创建对象时指定容量 - public StringBuffer(String str)
创建对象时指定字符串内容
方法:
- public int capacity()
返回当前的容器容量 - public int length()
返回当前容器内字符串的长度 - public StringBuffer append(String str)
向容器中拼接字符串 - public StringBuffer insert(int offset,String str)
在指定索引处插入字符串 - public StringBuffer deleteCharAt(int index)
删除指定索引处的字符 - public StringBuffer delete(int start,int end)
删除指定位置的字符串 - public StringBuffer replace(int start,int end,String str)
替换指定位置中的字符串 - public StringBuffer reverse()
将字符串反转 - public String substring(int start)
从指定位置到结束截取字符串并返回 - public String substring(int start,int end)
截取指定位置的字符串并返回
String和StringBuffer的相互转换:
String转换为StringBuffer可以使用构造方法 public StringBuffer(String str),在创建StringBuffer时,将String类型对象填入StringBuffer容器中,或者也可以使用StringBuffer中的append()方法。
StringBuffer转换为String可以使用StringBuffer类中的substring()方法。 也可以通过toString()方法。
A:案例演示
需求:把数组中的数据按照指定个格式拼接成一个字符串
举例:
int[] arr = {1,2,3};
输出结果:
“[1, 2, 3]”
用StringBuffer的功能实现
public class Demo3 {
public static void main(String[] args) {
int [] arr={1,2,3};
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append('[');
for (int i = 0; i < arr.length; i++) {
if(i<arr.length-1){
stringBuffer.append(arr[i]).append(',');
}else {
stringBuffer.append(arr[i]).append(']');
}
}
System.out.println(stringBuffer);
}
}
StringBuffer和StringBuilder的区别:
StingBuffer和StringBuilder都是字符串缓冲区,前者的线程安全,效率低,后者线程不安全,效率高。
传参
StringBuffer作为一个引用类型,形参的改变会影响实参。
Arrays类
Arrays这个类是一个工具类,此类包含了用于操作数组(如排序和搜索等)的各种方法,此类还包含了一个允许数组被视为列表的静态工厂。
成员方法:
- public static String toString(int[] a)
返回指定数组的内容的字符串表现形式 - public static void sort(int[] a)
数组进行排序 - public static int binarySearch(int[] a,int key)
使用二进制搜索法查找数组中指定的值
二分查找法
public class Demo4 {
public static void main(String[] args) {
int[] arr={10,20,30,40,50};
int index = findIndex(arr, 40);
System.out.println(index);
}
private static int findIndex(int[] arr,int x) {
int minIndex=0;
int maxIndex=arr.length-1;
int centerIndex=(minIndex+maxIndex)/2;
while (minIndex<=maxIndex){
if(arr[centerIndex]==x){
return centerIndex;
}else if(arr[centerIndex]<x){
minIndex=centerIndex+1;
}else if(arr[centerIndex]>x){
maxIndex=centerIndex-1;
}
centerIndex=(minIndex+maxIndex)/2;
}
return -1;
}
}
二分查找法的思想:计算出中间的索引,将数组分为两部分。如果中间的索引的元素正好等于要查找的元素则返回中间的索引值。如果查找的元素小于中间索引的元素,那么就改变数组的结束索引,变为中间索引减1,再继续计算中间索引。从这个小数组中查找。如果查找的元素大于中建索引的元素,那么就改变起始索引,变为中间索引加1,再继续寻找。直到中间索引的元素正好等于这个要查找的元素为止。使用二分查找的前提是要查找的数组必须是有序的。
包装类
为了对基本数据类型进行更多的操作,更方便的操作,java就针对每一种基本数据类型提供了相应的包装类类型。
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
我们以Interger类举例
Integer类
这类包装Integer值对象中的原始类型int。Integer类型的对象包含了一个字段的类型是int。
构造方法:
- public Integer(int value)
将一个int类包装成Integer类型 - public Integer(String s)
将一个String类对象的内容包装成Integer类型
int类型和String的相互转化:
int转化为String:
- 可以直接将一个int类型的数据后面拼接上一个空串
- 先将int类型包装为Integer类型,再调用Integer中的toString()方法。
- 调用String类中的valuOf()方法
String转化为int:
- 将String类型的数据包装为Integer类型,再调用intValue()方法。
- 调用Integer类中的parsent()方法