讲课流程:【API应用】--编译器提醒
1,Arrays类【冒泡排序、选择排序】
冒泡排序:
原理:相邻元素两两比较,大的往后走;一次完成,大的沉底。
代码实现--字符串字母排序
实现步骤:
A:两个相邻位置数据进行比较,大的沉底;if(arr[i]>arr[i+1]) 交换位置
B:数组元素进行第一次全比较:for(int i=0;i<arr.length-1;i++)
C:全部数据进行比较:for(int i=0;i<arr.length-1;i++)套在最外层---需要优化第二步
D:for(intj=0;j<arr.length-1-i;j++)
-1:防止越界;-i:每一轮比较后,元素变少
E:组合代码
二分查找:
乱序查找,可以直接一一对比;
二分查找前提:查找数据数组有序
步骤:
A:把查找的值与中间位置元素比较,相同,则返回;不相同,则比较大小;
B:若是小,则比较前半部;若大,则判断后半部。
1 package cn.itcast_01; 2 /** 3 * 冒泡排序 4 * @author itcast 5 * 6 */ 7 public class BubbleSort { 8 public static void main(String[] args) { 9 int[] arr = {8,9,2,3,1,4,5,6,7,0}; 10 //排序前打印 11 printArr(arr); 12 //冒泡排序 13 bubbleSort(arr); 14 //排序后打印 15 printArr(arr); 16 } 17 /** 18 * 冒泡排序 19 * @param arr 排序的对应数组 20 */ 21 public static void bubbleSort(int[] arr){ 22 /* 1,进行相邻两个位置数据比较,大的往后沉; 23 * 2,进行一轮比较,将最大值沉到最后 24 * 3,继续下一轮比较,此轮最后的值不用再参与比较,如此循环,直至排序完成 25 * */ 26 for (int i = 0; i < arr.length-1; i++) { 27 for (int j = 0; j < arr.length-1-i; j++) { 28 //-1:防止越界;-i:每一轮比较完成后,减少一次比较 29 if(arr[j]>arr[j+1]) 30 changeLocation(arr,j,j+1); 31 } 32 } 33 } 34 /** 35 * 打印数组 36 * @param arr 传入要打印的数组 37 */ 38 public static void printArr(int[] arr){ 39 for (int i = 0; i < arr.length; i++) { 40 System.out.print(arr[i]+"\t"); 41 } 42 System.out.println(); 43 } 44 /** 45 * 交换两个元素的位置 46 * @param arr 数组 47 * @param i 交换数值的第一个索引值 48 * @param j 交换数值的第二个索引值 49 */ 50 private static void changeLocation(int[] arr,int i,int j){ 51 int temp = arr[i]; 52 arr[i] = arr[j]; 53 arr[j] = temp; 54 } 55 }
Arrarys类:
构造方法
toString():将任意数组类转换成String类型
binarySearch():二分查找
1 package cn.itcast_01; 2 3 public class HalfSearch { 4 public static void main(String[] args) { 5 6 } 7 8 public static int halfSearch(int[] arr, int search) { 9 //二分查找应该先排好序 10 //数组打印并排序 11 BubbleSort.printArr(arr); 12 BubbleSort.bubbleSort(arr); 13 BubbleSort.printArr(arr); 14 //查找核心代码 15 int start = 0; 16 int end = arr.length - 1; 17 int mid = (start + end) / 2; 18 while (start<=end) { 19 if (arr[mid] > search) { 20 end = mid - 1; 21 } else if (arr[mid] < search) { 22 start = mid + 1; 23 } else if (arr[mid] == search) { 24 return mid; 25 } 26 mid = (start + end) / 2; 27 } 28 return mid; 29 } 30 }
2,System类
构造方法
成员方法
exit():终止当前运行的虚拟机
currentTimeMillis():返回以毫秒为单位的当前时间
arraryCopy():复制数组
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
复制的长度,比目标数组替换位置后的长度长,怎么办?
复制的长度不能超过目标数组后面剩的长度
3,StringBuffer类【字符串缓冲区类】
与String的区别:
String数组存在常量池里面;一旦赋值,值不能发生改变
StringBuffer则可以改变,采用的是缓冲区机制【随数据增多,可以继续开辟内存空间【同一个对象】】
构造方法
StringBuffer()
StringBuffer(int capacity)//capacity是一个默认长度,给定值比默认值小时,也是默认值
StringBuffer(String str)
String和StringBuffer的转换:可以通过构造方法实现
方法
length() //实际长度
capacity() //理论长度
添加功能
append() //追加元素,数据额类型可混合,可链式编程
insert() //在指定位置添加元素
删除功能
deleteCharAt() 删除指定位置字符
delete() 删除指定位置到指定位置的字符
包左不包右【约定成俗】
StringBuffer replace(int start, int end, String str)把开始到结束位置的字符用一个新的字符串给替换。
String substring(int start):从指定位置到末尾截取
String substring(int start, int end): 从指定位置到结束位置截取
StringBuffer reverse()将此字符序列用其反转形式取代
实例:String 字符串翻转打出,两个例子,进行区别
常量相加会直接累加,然后在常来池里去找有没有,有则就是常量池里的值。
变量相加会重新开辟空间。
String是一种特殊的引用类型,他传的值是变量的值。
4,Integer类:
范围最大最小值
方法:二进制,八进制,十六进制【进制转换】
构造方法:
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
Interger(int value);
Integer(String s); NumberFormatException:数据格式化异常,此处字符串必须是数字字符组成的字符串
int---String:1,加空格符;2,String.valueOf();3,Integer做桥梁integer.toString();
String--int:1,"100",integer做桥梁;2,int num = Integer.parseInt(String str);
JDK1.5新特性
自动装箱:直接把基本类型赋值给引用类型
自动拆箱:直接把引用类型赋值给基本类型
Integer ii = 100;
ii = ii+200; ii = new Integer(ii.intValue()+200);
开发原则:只要是对象,就先做不为null判断。
byte常量池
byte常量池。
在byte范围内的值,直接赋值给Integer,是从byte常量池里获取。
1 package cn.itcast_05; 2 3 import java.util.Arrays; 4 5 /** 6 * 7 * 一个字符串“23 98 71 54 60”(数字之间通过空格分隔,并且是没有大小顺序的),设计一个功能,把这个字符串排序后变成如下字符串:"23 54 60 71 98" 8 1、先把字符串转成字符数组。(是不是已经拿到了里边所有的数值(字符串类型的)) 9 2、把字符数组转成int类型的数组。 10 3、对int数组进行排序。 11 4、把int类型的数组转变成字符串。 12 * 13 */ 14 public class IntegerDemo { 15 public static void main(String[] args) { 16 String s = "23 98 71 54 60"; 17 //先把字符串转成字符数组。(是不是已经拿到了里边所有的数值(字符串类型的) 18 String[] strArr = s.split(" "); 19 //把字符数组转成int类型的数组 20 int[] arr = new int[strArr.length]; 21 for (int i = 0; i < arr.length; i++) { 22 arr[i] = Integer.parseInt(strArr[i]); 23 } 24 //对int数组进行排序 25 Arrays.sort(arr); 26 //把int类型的数组转变成字符串 27 StringBuffer sb = new StringBuffer(); 28 for (int i = 0; i < arr.length; i++) { 29 sb.append(arr[i]).append(" "); 30 } 31 //提出最后一个空格 32 String s1 = sb.toString().trim(); 33 System.out.println(s1); 34 35 } 36 }
常用API方法
1:Object(重点)
toString():为了让对象的显示有意义,一般重写该方法。
equals():默认比较的是地址值,一般重写该方法,按照自己的需求。
2:Math
floor():小于等于参数的最大整数。
ceil():大于等于参数的最小整数。
round():四舍五入。+0.5
random():随机数。[0.0,1.0)
pow():x的y次方
sqrt():平方根 素数问题。
3:Random
nextInt(int n):随机产生[0,n)
4:Scanner
nextInt():获取int类型
nextLine():获取String类型
5:String(重点)
6:StringBuffer(重点)
append():添加
insert():在指定位置添加
reverse():反转
7:System
exit():退出
8:Arrays
sort():排序
binarySearch():二分查找
9:Integer(重点)
parseInt(String s):把String -- int