p576 Arrays工具类
p577 冒泡排序
import java.util.Arrays;
public class BubbleSort {
/**
* 冒泡排序:
*/
public static void main(String[] args) {
// int[] arr = {3,2,7,6,8};
int[] arr = {9,8,10,7,6,0,11};
System.out.println("排序前:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("==================");
System.out.println("排序后:");
//开始冒泡排序,从后往前比较,根据考研时的总结的算法。
// for (int i = 1; i < arr.length; i++) {
// for (int j = arr.length-1; j>0; j--) {
// if (arr[j-1] > arr[j]){
// int temp = arr[j];
// arr[j] = arr[j-1];
// arr[j-1] = temp;
// }
// }
// }
//从前往后比较,根据考研时的算法的变形。冒出最大的放在最后面,而且不参与后续的比较
// for (int i = 1; i < arr.length; i++) {
// for (int j = 1; j < arr.length - i; j++) {
// if (arr[j] < arr[j-1]){
// int temp = arr[j];
// arr[j] = arr[j-1];
// arr[j-1] = temp;
// }
// }
// }
//老师动力节点,7个数据循环6次。(比较6次)
//从前往后比较,冒出大的放在最后面
int count = 0;//count计算一下比较了多少次
for (int i = arr.length-1; i > 0; i--) {
for (int j = 0; j<i; j++) {
if (arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
count++;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println("一共比较了"+count+"次");
}
}
p579选择排序
package com.bjpowernode.javase.array;
/**
* 选择排序
* 每次找出最小的和最前面的交换位置
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {9,8,10,7,6,0,11};
int count = 0;
int count2 = 0;
for (int i = 0; i < arr.length-1; i++) {
// System.out.println(i);
// i正好是最左边元素的下标
int min = i;
for (int j = i+1; j < arr.length; j++) {
count++;
if (arr[j] < arr[min]){
min = j;
}
}
if (min != i){
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
count2++;
}
}
System.out.println("一共比较了"+count+"次");
System.out.println("一共交换了"+count2+"次");
for (int k = 0; k < arr.length; k++) {
System.out.println(arr[k]);
}
}
}
p580-p582二分查找
package com.bjpowernode.javase.array;
/**
* 数组工具类:自己写的,不是SUN的
* 1、关于查找算法:二分查找
* 前提:数组有序且顺序存储
*
*/
public class ArrayUtil {
public static void main(String[] args) {
int[] arr = {1,4,6,8,34,55,67,76,89};
int element = 34;
int index = BinarySearch(arr,element);
System.out.println(index == -1?"该元素不存在":"该元素下标是"+index);
}
/**
* 二分查找
* @param arr 被查找的数字组
* @param element 查找的元素
* @return -1表示该元素不存在,其他返回值表示该元素下标
*/
public static int BinarySearch(int[] arr, int element) {
//开始下标
int low = 0;
//结束下标
int high = arr.length-1;
//中间下标
//low一直在增加,high一直在减少,只要low在high的左边,那就可以继续查找
while (low <= high){
int mid = (low + high)/2;
for (int k = 0; k < arr.length; k++) {
if(arr[mid] > element){
high = mid - 1;
}else if(arr[mid] < element){
low = mid + 1;
}else {
return mid;
}
}
}
return -1;
}
}
P583 Arrays工具类
package com.bjpowernode.javase.array;
import java.lang.reflect.Array;
import java.util.Arrays;
/**
* SUN公司把一些常用的方法都封装好了,直接调用就行
*/
public class ArrayTest {
public static void main(String[] args) {
int[] arr = {2,3,5,6,67,7,8};
//排序
Arrays.sort(arr);
//输出
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
//二分查找
int index = Arrays.binarySearch(arr,67);
System.out.println(index ==-1?"该元素不存在":"该元素的下标是"+index);
}
}
P584-p586 String字符串的存储原理
字符串常量池
new对象的时候一定在堆内存中开辟空间
package com.bjpowernode.javase.string;
/**
*
* 关于java JDK中的一个类:java.lang.String
*/
public class StringTest01 {
public static void main(String[] args) {
String s = "abcde";
String s1 = "abcde" + "xy";
//使用构造方法创建
String s3 = new String("xy");
}
}
String对象的引用同样是保存了对象的内存地址。
package com.bjpowernode.javase.string;
public class UserTest {
public static void main(String[] args) {
User user = new User(110,"张三");
}
}
package com.bjpowernode.javase.string;
import java.sql.SQLOutput;
public class StringTest02 {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
//分析s1和s2是否相等
System.out.println(s1 == s2);//相等,此处比较的是内存地址。s1和s2都是指向
System.out.println(s1.equals(s2));//相等,此处比较的是字符串的值
String x = new String("xyz");
String y = new String("xyz");
System.out.println(x == y);//不相等,因为new出来的对象会在堆内存中创建空间,两个对象X和y分别有两个内存地址。
//String类已经重写了equals方法,此处调用的方法是重写之后的方法。
System.out.println(x.equals(y));//相等,此处比较的是字符串值。
}
}
- 如下图所示,s1和s2的地址是同时指向常量池中的“hello”对象,所以使用“==”判断把内存地址时相等;用“equals”方法判断字符串时,也是相等。
- 而x和y是new出来的对象,在堆内存中分别创建了2个对象去同时指向常量池中的字符串“xyz”,所以使用“==”判断内存地址时比较的是堆内存中两个对象的内存地址,所以不相等;用“equals”方法判断字符串时,比较的是字符串本身,所以是相等的。
p586 面试题1
p587 面试题2
P588 String类中的构造方法——toString
package com.bjpowernode.javase.string;
public class StringTest03 {
public static void main(String[] args) {
String s1 = "HelloWorld";
byte[] bytes = {97,98,99};
//创建字符串的时候可以直接将数组内容传进去
String s2 = new String(bytes);
//此处输出s2字符串本身,是因为s2自动调用了toString()方法。
System.out.println(s2);
System.out.println("++++++++++++++++");
System.out.println(s2.toString());
}
}
P589 String类中的构造方法
- 将byte数组中的一部分截取为字符串。
P590 String类中的构造方法
- 将char数组全部转换为字符串
总结
/**
* String类中常用的构造方法
* 第一个:String s = new String("abc");
* 第二种:String s = "abc";//最常用
* 第三种:String s = new String(bytes数组);
* 第四种:String s = new String(bytes数组,起始下标,长度);
* 第五种:String s = new String(chars数组);
* 第六种:String s = new String(chars数组,起始下标,长度);
*
*/
P591 String类中的方法——charAt方法
package com.bjpowernode.javase.string;
import org.w3c.dom.ls.LSOutput;
public class StringTest04 {
public static void main(String[] args) {
//String中的常用方法
//1、char charAt(int index)
char c = "中国人".charAt(1);
System.out.println(c);//国
}
}
P592 String类中的方法——compareTo方法
package com.bjpowernode.javase.string;
import org.w3c.dom.ls.LSOutput;
public class StringTest04 {
public static void main(String[] args) {
//String中的常用方法
//(掌握)1、char charAt(int index)
char c = "中国人".charAt(1);
System.out.println(c);//国
//(了解)2、compareTo(String anotherString)
//比较的是字符串的阿斯克码值,相等返回0,前大后小返回1,前小后大返回-1
int result = "abc".compareTo("abc");
System.out.println(result);//完全一致返回0
int result2 = "abcd".compareTo("abce");
System.out.println(result2);//不一致返回-1
int result3 = "abce".compareTo("abcd");
System.out.println(result3);//返回值大于1
/**
* !!! 注意不是把字符串中所有字母的阿斯克码加起来比较,而是挨个比较
* 只要前面的能得到结果,就不再往下比较(能分胜负就不再比较)
*/
System.out.println("xyz".compareTo("yxz"));//x比y小,返回-1
}
}
P593 String类中的方法——contains方法
//判断前面的字符串中是否包含后面的子字符串
//(掌握)3、boolean contains(CharSequence s)
System.out.println("HelloWorld.java".contains(".java"));//返回true
System.out.println("http://www.baidu.com".contains("https://"));//false
}
P594 String类中的方法——endsWith方法![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5999ef08d1174870f2b83a12a1f899e1.png)
判断文件类型常用
//判断当前字符串是否以某个字符串结尾
//(掌握)3、boolean endsWith(String suffix)
System.out.println("test.txt".endsWith("java"));//false
System.out.println("test.txt".endsWith("txt"));//true
P595 String类中的方法——equals方法![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b89c2370e4f4ab78867c4beb28e1d280.png)
注意equals和compareTo的区别,equals是比较是否相等,compareTo是比较谁大谁小。
//比较两个字符串是否相等,必须使用equals,不能是“==”
//(掌握)3、 boolean equals(Object anObject)
//compareTo和equals的区别
System.out.println("test.txt".equals("test"));//flase
P596 String类中的方法—— equalsIgnoreCase方法
忽略大小写,验证码常用
System.out.println("tESt.txt".equalsIgnoreCase("test.txt"));//true
P597 String类中的方法—— getBytes方法、indexOf方法
//(掌握)7、 使用指定的字符集将此 String 编码为 byte 序列
// 并将结果存储到一个新的 byte 数组中。
byte[] bytes = "abcde".getBytes();
System.out.println(bytes);//错误,这样输出的是地址信息
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);//97,98,99,100,101
//(掌握)8、 返回指定子字符串在此字符串中第一次出现处的索引。
System.out.println("abcdefcd".indexOf("cd"));//2
P598 String类中的方法—— is empty方法、length()方法
//(掌握)9、 判断字符串是否为空
System.out.println("".isEmpty());//true
System.out.println("s".isEmpty());//false
//(掌握)10、 判断字符串长度
//注意数组长度是”.length函数“,字符串是”.length()“方法
System.out.println("avf".length());//3
注意此处的小括号,判断字符串带小括号
P599 String类中的方法—— lastIndexOf、replace方法、split方法
//(掌握)11、 lastIndexOf,返回字符串在其中最后一次出现的位置
System.out.println("abcdefcd".lastIndexOf("cd"));//6
//(掌握)12、 replace,替换
String newString = "http://www.baidu.com".replace("http://","https://");
System.out.println(newString);//https://www.baidu.com
//将等号替换为冒号
String newString2 = "name=zhangsan&password=123&age=20".replace("=",":");
System.out.println(newString2);//name:zhangsan&password:123&age:20
//掌握)13、 split,拆分字符串
String[] newString3 = "1997-04-10".split("-");
System.out.println(newString3);//输出错误,此处输出的是地址
for (int j = 0; j < newString3.length; j++) {
System.out.println(newString3[j]);
}
String[] newString4 = "name=zhangsan&password=123&age=20".split("&");
for (int j = 0; j < newString4.length ;j++) {
System.out.println(newString4[j]);
}
P600-p601 String类中的方法—— startsWith方法、subString方法、toCharArray方法
//掌握)14、 startsWith判断是否以某个字符串开始
System.out.println("http://www.baidu.com".startsWith("http"));//true
System.out.println("http://www.baidu.com".startsWith("https"));//false
注意是左闭右开区间,包含起始下标,但是不包含结束下标
//掌握)15、 String subString(int beginIndex)方法,截取字符串
System.out.println("http://www.baidu.com".substring(6));//截取下标6以后的字符串,包括下标6。结果是”“
//掌握)16、 String subString(int beginIndex,int endIndex)方法,截取字符串
System.out.println("http://www.baidu.com".substring(6,7));//截取,带2个参数,起始下标和结束下标
//掌握)17、char[] toCharArray()
//将字符串转换为char数组
char[] chars = "我是中国人".toCharArray();
for (int j = 0; j < chars.length; j++) {
System.out.println(chars[j]);
P602 String类中的方法—— toLowerCase方法
//掌握)19、toLowerCase
//(掌握)2、toUpperCase
System.out.println("absfvvbg".toUpperCase(Locale.ROOT));
System.out.println("SKFGJBSG".toLowerCase(Locale.ROOT));
P603 String类中的方法—— trim方法、ValueOf方法(唯一一个静态方法,不需要new对象)
网站登录输入登录名时会用到
//掌握)21、trim
//删除前后空白
String newString5 = " hello ".trim();
System.out.println(newString5);
//掌握)21、valueOf
//将非字符串转换为字符串类型
String s1 = String.valueOf(true);
System.out.println(s1);//将布尔类型转为字符串类型
String s2 = String.valueOf(100);
System.out.println(s2);//将int类型转为字符串类型
String s3 = String.valueOf(new Customer());
System.out.println(s3);//此处的Customer类中没有重写toString方法,所以输出是一个地址
所有打印输出到控制台上的内容都是字符串
P604 使用StringBuffer和StringBuilder进行字符串拼接
P605 StringBuffer和StringBuilder的区别
P606 包装类存在的意义
P607 八种包装类分别是
P608 拆箱和装箱
P609 Integer的构造方法
P610 Double的构造方法
P611 通过常量获得最大值和最小值
P612 自动装箱和自动拆箱
P613 回顾
P614 自动装箱和自动拆箱
面试题:[-127,128]之间的256个数字会在类加载的时候创建出来放在常量池中,不需要new对象
- 自动装箱和自动拆箱。重点。Integer类加载的时候会初始化整数型常量池:256个对象,[-127,128]之间的数字不会new对象,直接从常量池里面取出。