目录
StringBuffer
构造方法
public StringBuffer()
// 无参构造方法
public StringBuffer(int capacity)
// 指定容量的字符串缓冲区对象
public StringBuffer(String str)
// 指定字符串内容的字符串缓冲区对象
方法
public int capacity()
// 返回当前容量
public int length()
// 返回长度(字符数),实际值
- 添加功能
public StringBuffer append(String str)
// 把str添加到字符串缓冲区里面,并返回字符串缓冲区本身
// append有很多重载方法,可以把任意类型的数据插入到字符串缓冲区里面
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)
// 从start开始到end,用str替换
- 反转功能
public StringBuffer reverse()
- 截取功能
注意返回值类型是String,StringBuffer本身不变
public String substring(int start)
// 截取从start到最后
public String substring(int start,int end)
// 截取从start开始到end结束,包左不包右
StringBuffer和String
- StringBuffer和String的区别
- 前者长度和内容可变,后者不可变
- 如果使用前者做字符串的拼接,不会浪费太多的资源
- String和StringBuffer的转换
- String转换成StringBuffer
- 通过构造方法
String s = "hello"; StringBuffer sb = new StringBuffer(s); // 常用
- 通过append方法
String s = "hello"; StringBuffer sb2 = new StringBuffer(); sb2.append(s);
- 不能把字符串的值直接赋值给StringBuffer
String s = "hello"; // StringBuffer sb = s; // StringBuffer sb = "hello"; // 这两种方法都是错误的
- StringBuffer转换成String
- 通过构造方法
StringBuffer buffer = new StringBuffer("java"); String str = new String(buffer);
- toString()方法
StringBuffer buffer = new StringBuffer("java"); String str2 = buffer.toString(); // 常用
面试题
- String,StringBuffer,StringBuilder的区别
- String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的;
- StringBuffer是同步的,数据安全,效率低;
- StringBuilder是不同步的,数据不安全,效率高
- StringBuffer和数组的区别?
- 两者都可以看成是一个容器,装其他的数据
- 但是呢,StringBuffer的数据最终是一个字符串数据
- 而数组可以放置多种数据,但必须是同一种数据类型
- 形式参数问题
- 形式参数
- 基本类型: 形式参数的改变不影响实际参数
- 引用类型: 形式参数的改变直接影响实际参数
- String作为参数传递,效果和基本类型作为参数传递一样。
StringBuffer作为参数传递,append函数可以改变实际参数值,直接赋值(sb1=sb2)不会改变实际参数值。
- 形式参数
数组高级
排序
- 冒泡排序: 相邻元素两两比较,大的往后放。第一次完毕后,最大值就出现在了最大索引处。同理,继续,即可得到一个排好序的数组。
- 代码
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;
}
}
}
}
- 选择排序: 从索引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;
}
}
}
}
查找
- 折半查找(二分查找)
- 代码
public static int getIndex(int[] arr, int value) {
// arr必须是排好序的数组
// 定义最大索引,最小索引
int max = arr.length - 1;
int min = 0;
// 计算中间索引
int mid = (max + min) / 2;
while (arr[mid] != value) {
if (arr[mid] > value) {
max = mid - 1;
} else {
min = mid + 1;
}
// 加入判断
if(min > max) {
return -1;
}
mid = (min + max) / 2;
}
return mid;
}
Arrays类
- 作用: 针对数组进行操作的工具类,比如排序和查找
- 方法
public static String toString(int[] a)
// 把数组转成字符串
public static void sort(int[] a)
// 对数组进行排序
public static int binarySearch(int[] a,int key)
// 二分查找
注: 可以是任意类型的数组,这里举例用的int类型数组
Integer
类类型
java针对每一种基本数据类型提供了对应的类类型
- byte-------------------Byte
- short------------------Short
- int----------------------Integer
- long-------------------Long
- float-------------------Float
- double----------------Double
- char-------------------Character
- boolean--------------Boolean
Integer类
成员变量
public static final int MAX_VALUE
// int类型能表示的最大数: 2147483647
public static final int MIN_VALUE
// int类型能表示的最小数:-2147483648
构造方法
public Integer(int value)
public Integer(String s) // 这个字符串必须是由数字字符组成
方法
public static String toBinaryString(int i)
// 把十进制数转换成二进制数字符串
public static String toOctalString(int i)
// 把十进制数转换成八进制数字符串
public static String toHexString(int i)
// 把十进制数转换成十六进制数字符串
public static String toString(int i, int radix)
// 把十进制转到其他进制,进制的范围2-36
public static int parseInt(String s,int radix)
// 把其他进制转换成10进制
// Integer.parseInt("123",2)会报错: NumberFormatException
// 二进制数字只有0和1
注: 下面int类型和String类型的相互转换中也有一些Integer的函数
int和String的转换
- int – String
int number = 100;
String s1 = "" + number;
System.out.println("s1:"+s1);
int number = 100;
String s2= String.valueOf(number);
System.out.println("s2:"+s2);
// 常用
int number = 100;
Integer i = new Integer(number);
String s3 = i.toString();
System.out.println("s3:"+s3);
// int -- Integer -- String
int number = 100;
String s4 = Integer.toString(number);
System.out.println("s4:"+s4);
- String – int
String s = "100";
Integer ii = new Integer(s);
int x = ii.intValue();
System.out.println("x:"+x);
//String -- Integer -- int
String s = "100";
int y = Integer.parseInt(s);
System.out.println("y:"+y);
// 常用。这里举例是转成int类型,如果String转成其他类型也可以用其他类型对应的类类型的对应方法
面试题
- JDK5的新特性
- 自动装箱: 把基本类型转换为包装类类型
- 自动拆箱: 把包装类类型转换为基本类型
- 举例
- Integer i = 100;//自动装箱
- ii+=200;//自动拆箱,再自动装箱
- Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据,例如Integer i1 = 127; Integer i2 = 127; System.out.println(i1==i2);//地址相同,结果是true。
Character
概述
Character类在此对象中包装一个基本类型char的值,此外,该类提供了几种方法,以确定字符的类别(小写字母,数字等等),并将字符从大写转换成小写,反之亦然
构造方法
public Character(char value)
成员方法
public static boolean isUpperCase(char ch)
// 判断给定的字符是否是大写字符
public static boolean isLowerCase(char ch)
// 判断给定的字符是否是小写字符
public static boolean isDigit(char ch)
//判断给定的字符是否是数字字符
public static char toUpperCase(char ch)
// 把给定的字符转换为大写字符
public static char toLowerCase(char ch)
// 把给定的字符转换为小写字符