笔记之java基础---13
1、冒泡排序:
相邻元素两两比较,大的往后走。第一次完毕后,最大值就在最大索引处。
代码实现:
int[] arr = {37,92,54,18,76};
public static void bubbleSort(int[] arr){
//外循环控制次数
for (int i = 0; i < arr.length - 1; i++) {
//内循环控制比较交换
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
2、二分查找:
注意:二分查找必须是有序查找,数组必须是有序的。
public static int find(int[] arr){
int start = 0;
int end = arr.length-1;
int mid = (start+end)/2;
while(arr[mid] != 18){
if(arr[mid] < 18){
//说明目标值在右边
start = mid + 1;
}else {
//说明目标值在左边
end = mid - 1;
}
//当小的索引大于大的索引且还没有找到说明不存在
if(start > end){
return -1;
}
mid = (start+end)/2;
}
return mid;
}
3、Arrays类:针对数组操作的工具类,主要是排序和查找
* 功能:
* public static String toString(int[] a);把整形数组变成字符串。
* sort(int[] a);对数组排序
* binarySearch(int[] a, int key);对数组二分查找
代码实例:
public class ArrayDemo3 {
public static void main(String[] args) {
int[] arr = {23,84,51,72,69};
//public static String toString(int[] a);//把整形数组变成字符串。
String str = Arrays.toString(arr);
System.out.println(str);
// 对arr数组排序
Arrays.sort(arr);
// 排序完了后把整形数组变成字符串输出
System.out.println(Arrays.toString(arr));//binarySearch(int[] a, int key);对数组二分查找,要求数组有顺序
int[] arr2 = {12,23,34,45,56,67};
//查找2,3的索引
System.out.println(Arrays.binarySearch(arr2,23));
System.out.println(Arrays.binarySearch(arr2,27));
}
}
4、System类包含一些有用的类字段和方法,它不能被实例化
* static void exit(int status);终止当前正在运行的java虚拟机,参数用作状态码;根据惯例,非零的状态码表示异常终止。
* static long currentTimeMillis();返回以毫秒为单位的时间
* static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
* 从指定数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
5、 StringBuffer:字符串缓冲区类
1)与String的区别:
* String一旦被赋值,不能发生改变。而StringBuffer可以改变。
* 为什么呢?
* StringBuffer采用的是缓冲区机制。
* 一开始首先开辟以希望空间,随着数据的增多还可以继续开辟空间,这些操作针对的是同一个对象。
*
* 构造方法:
* StringBuffer(),构造一个不带字符的缓冲区,初始容量为16
* StringBuffer(int capacity),指定容量
* StringBuffer(String str),有初始字符
*
* 成员方法:
*
* int length();Returns the length (character count).
* int capacity();Returns the current capacity.
代码实例:
public static void main(String[] args) {
//方式1
StringBuffer sb = new StringBuffer();System.out.println("sb"+sb);
System.out.println("sb.length"+"-------"+sb.length()); //0
System.out.println("sb.capcity"+"-------"+sb.capacity()); //16
//方式2
StringBuffer sb2 = new StringBuffer(50);
System.out.println("sb2"+sb2);
System.out.println("sb2.length"+"-------"+sb2.length()); //0
System.out.println("sb2.capcity"+"-------"+sb2.capacity()); //50
//方式3,字符串转成StringBuffer可以通过这种构造方法实现
StringBuffer sb3 = new StringBuffer("hello");
System.out.println("sb3"+sb3);
System.out.println("sb3.length"+"-------"+sb3.length()); //5
System.out.println("sb3.capcity"+"-------"+sb3.capacity()); //21
}
2)添加功能:
* StringBuffer append(int i);在末尾追加元素
* StringBuffer insert(int offset, String str);在指定位置添加
3)删除功能:
* StringBuffer deleteCharAt(int index);删除指定位置字符
* StringBuffer delete(int start, int end);删除指定开始位置到结束位置字符。
4)反转功能:
reverse()
6、测试题: 要求:键盘输入一个字符串,把字符串的数据反转输出:
方式一:
A:把字符串变成字符数组
B:数组倒着打
方式二:
想使用StringBuffer的reverse()方法。
A:String-----StringBuffer 构造方法
B:StringBuffer-----reverse()
C:StringBuffer-----String 构造方法,toString()
7、关于StringBuffer的数据类型的面试题:
1)面试题一:
* 基本类型:形式参数改变不影响实际参数
* 引用类型:形式参数改变直接影响实际参数
* 但是:字符串是一个特殊的引用类型。
*
* 那么StringBuffer呢?
2)面试题二:
8、Integer类:
应用背景:我们的基本类型只有值的使用,为了能够进行更过的操作,比如说,某种基本类型的范围判断,整数的进制转换。
那么,java就针对每种基本类型提供了一种包装类使用。
* 基本类型 包装类
* byte Byte
* short Short
* int Integer
* long Long
* float Float
* double Double
* char Character
* boolean Boolean
以Integer为例
1) 构造方法:
* Integer(int value)
* Integer(String s)
* 注意这里的字符串必须是以数字为组成的字符串
2)进制转换的方法:
static String toBinaryString(int i);输入十进制,输出二进制。
toHexString(int i) ;输入十进制,输出十六进制。
toOctalString(int i);输入十进制,输出八进制。
3) int-----String
* String.valueOf(num);
* toString(num);
String-----int
* Integer.parseInt(s);
9、 自动装箱:就是把基本类型直接赋值给引用类型。
自动拆箱:也就是把引用类型直接拆成基本类型
10、关于Integer的面试题:
* byte常量池,
* byte范围内的值直接赋值给Integer,是从常量池中直接获取的。