Java中Stringbuffer、Arrays、Interger、Character类的特性

1:StringBuffer(掌握)

(1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了

一个字符串缓冲区类。StringBuffer供我们使用。

(2)StringBuffer的构造方法

A:StringBuffer()

B:StringBuffer(int size)

C:StringBuffer(String str)

(3)StringBuffer的常见功能

A:添加功能

public StringBuffer append(String str)将指定的字符串追加到此字符序列。

B:删除功能

public StringBuffer delete(int start,int end)移除此序列的子字符串中的字符。

public StringBuffer deleteCharAt(int index)移除此序列指定位置的 char。此序列将缩短一个 char。

C:替换功能

public StringBuffer replace(int start,int end,String str)使用给定 String 中的字符替换此序列的子字符串中的字符

D:反转功能

public StringBuffer reverse()将此字符序列用其反转形式取代。

E:截取功能(注意这个返回值)

public String substring(int start,int end)返回一个新的 String,它包含此序列当前所包含的字符子序列

public String substring(int start)返回一个新的 String,它包含此字符序列当前所包含的字符子序列。

(4)StringBuffer的练习(做一遍)

A:String和StringBuffer相互转换

String -- StringBuffer

构造方法

StringBuffer -- String

toString()方法

B:字符串的拼接

C:把字符串反转

D:判断一个字符串是否对称

(5)面试题

A:String,StringBuffer,StringBuilder的区别

String是不可改变的,StringBuffer,StringBuilder是可变的。

StringBuffer:同步的,数据安全,效率低。

StringBuilder:不同步的,数据不安全,效率高。

B:StringBuffer和数组的区别?

二者都是容器,但StringBuffer最终还是字符串,而字符数组只能装在任意数据类型,且只能是统一数据类型。

(6)注意的问题:

String作为形式参数,StringBuffer作为形式参数。

String做形参的时候可以看作是基本类型一样,并不会改变实参的值。

StringBuffer作为形参的时候,如果调用StringBuffer的方法的时候会改变对应实参的值,若只是简单的赋值的话,并不会改变实参的值。

2:数组高级以及Arrays(掌握)

(1)排序

A:冒泡排序

相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。同理,其他的元素就可以排好。

public static void bubbleSort(int[] arr) {

for(int x=0; x<arr.length-1; x++) {

for(int y=0; y<arr.length-1-x; y++) {

if(arr[y] > arr[y+1]) {

int temp = arr[y];

arr[y] = arr[y+1];

arr[y+1] = temp;

}

}

}

}

B:选择排序

把0索引的元素,和索引1以后的元素都进行比较,第一次完毕,最小值出现在了0索引。同理,其他的元素就可以排好。

public static void selectSort(int[] arr) {

for(int x=0; x<arr.length-1; x++) {

for(int y=x+1; y<arr.length; y++) {

if(arr[y] < arr[x]) {

int temp = arr[x];

arr[x] = arr[y];

arr[y] = temp;

}

}

}

}

(2)查找

A:基本查找

针对数组无序的情况

public static int getIndex(int[] arr,int value) {

int index = -1;

for(int x=0; x<arr.length; x++) {

if(arr[x] == value) {

index = x;

break;

}

}

return index;

}

B:二分查找(折半查找)

针对数组有序的情况(千万不要先排序,在查找)

public static int binarySearch(int[] arr,int value) {

int min = 0;

int max = arr.length-1;

int mid = (min+max)/2;

while(arr[mid] != value) {

if(arr[mid] > value) {

max = mid - 1;

}else if(arr[mid] < value) {

min = mid + 1;

}

if(min > max) {

return -1;

}

mid = (min+max)/2;

}

return mid;

}

(3)Arrays工具类

A:是针对数组进行操作的工具类。包括排序和查找等功能。

B:要掌握的方法(自己补齐方法)

把数组转成字符串:

排序:

二分查找:

(4)Arrays工具类的源码解析

(5)把字符串中的字符进行排序

举例:

"edacbgf"

得到结果

"abcdefg"

3:Integer(掌握)

(1)为了让基本类型的数据进行更多的操作,Java就为每种基本类型提供了对应的包装类类型

byte Byte

short Short

int Integer

long Long

float Float

double Double

char Character

boolean Boolean

(2)Integer的构造方法

A:Integer i = new Integer(100);

B:Integer i = new Integer("100");

注意:这里的字符串必须是由数字字符组成

(3)String和int的相互转换

A:String -- int

Integer.parseInt("100");

B:int -- String

String.valueOf(100);

(4)其他的功能(了解)

进制转换

(5)JDK5的新特性

自动装箱 基本类型--引用类型

自动拆箱 引用类型--基本类型

把下面的这个代码理解即可:

Integer i = 100; //自动装箱

i += 200; //自动拆箱,自动装箱

一定要注意包装类类型是否是null,因此一般都会在代码中添加if判断是否为null。

(6)面试题

Integer类型在直接赋值的时候,在-128到127之间的数据,是直接从缓冲池中获取数据,不会创建新的对象。超过这一范围的值会重新new一个对象。因此对应的对象的地址不同。

4:Character(了解)

(1)Character构造方法

Character ch = new Character('a');

(2)要掌握的方法:(自己补齐)

A:判断给定的字符是否是大写

public static boolean isUpperCase(char ch)确定指定字符是否为大写字母。

B:判断给定的字符是否是小写

public static boolean isLowerCase(char ch)确定指定字符是否为小写字母。

C:判断给定的字符是否是数字字符

public static boolean isDigit(char ch)确定指定字符是否为数字。

D:把给定的字符转成大写

public static char toUpperCase(char ch)使用取自UnicodeData 文件的大小写映射信息将字符参数转换为大写。

E:把给定的字符转成小写

public static char toLowerCase(char ch)使用取自UnicodeData 文件的大小写映射信息将字符参数转换为小写。

(3)案例:

统计字符串中大写,小写及数字字符出现的次数