java基础语法-day24-25进阶-Arrays工具类String自动装箱自动拆箱

28 篇文章 0 订阅

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方法在这里插入图片描述

判断文件类型常用

          //判断当前字符串是否以某个字符串结尾
            //(掌握)3、boolean endsWith(String suffix)

            System.out.println("test.txt".endsWith("java"));//false
            System.out.println("test.txt".endsWith("txt"));//true

P595 String类中的方法——equals方法在这里插入图片描述

注意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对象,直接从常量池里面取出。
  • 在这里插入图片描述

P615 Integer常用方法

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值